#include <cstdio>
#include <iostream>
#include <cstring>
#define ll long long
using namespace std;
int a[200000],n,Q;
struct edge{
int l,r,add;ll sum;
}node[200000*4];
void pushdown(int k)
{
node[k<<1].add += node[k].add;
node[k<<1].sum += (node[k<<1].r-node[k<<1].l+1)*node[k].add;
node[(k<<1)+1].add += node[k].add;
node[(k<<1)+1].sum += (node[(k<<1)+1].r-node[(k<<1)+1].l+1)*node[k].add;
node[k].add = 0;
}
void update(int k,int left,int right,int x)
{
if(left <= node[k].l && right >= node[k].r)
{
node[k].add += x;
node[k].sum += (node[k].r-node[k].l+1)*x;
return;
}
node[k].sum += (right-left+1)*x;
if(node[k].add)pushdown(k);
int mid = (node[k].l+node[k].r)>
【codevs 1082】线段树练习3
最新推荐文章于 2019-08-02 11:50:49 发布