Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MAX 100010
- struct Node
- {
- lld prop,sum;
- };
- Node tree[3*MAX+10];
- int arr[MAX+10];
- void build(int node, int start, int eend)
- {
- if(start==eend)
- {
- tree[node].sum=0;
- tree[node].prop=-1;
- return ;
- }
- int mid = (start+eend)>>1;
- int nleft = node<<1;
- build(nleft,start,mid);
- build(nleft+1,mid+1,eend);
- tree[node].sum = tree[nleft].sum+tree[nleft+1].sum;
- }
- void lazy_update(int node, int start, int eend,int x)
- {
- tree[node].prop = x;
- tree[node].sum = (eend-start+1)*x;
- }
- void node_update(int node, int start, int eend)
- {
- int mid = (start+eend)>>1;
- int nleft = node<<1;
- int nright = nleft+1;
- tree[nleft].prop = tree[nright].prop = tree[node].prop;
- tree[nleft].sum = (mid-start+1)*tree[nleft].prop;
- tree[nright].sum = (eend-mid)*tree[nright].prop;
- tree[node].prop=-1;
- }
- void update(int node, int start, int eend, int left, int right, int x)
- {
- if(start==left && eend==right)
- {
- lazy_update(node,start,eend,x);
- return ;
- }
- if(tree[node].prop!=-1)
- {
- node_update(node,start,eend);
- }
- int mid = (start+eend)>>1;
- int nleft = node<<1;
- if(right<=mid)
- {
- update(nleft,start,mid,left,right,x);
- }
- else if(left>mid)
- {
- update(nleft+1,mid+1,eend,left,right,x);
- }
- else
- {
- update(nleft,start,mid,left,mid,x);
- update(nleft+1,mid+1,eend,mid+1,right,x);
- }
- tree[node].sum = tree[nleft].sum+tree[nleft+1].sum;
- }
- lld query(int node, int start, int eend, int left,int right)
- {
- if(start==left && eend==right)
- {
- return tree[node].sum;
- }
- if(tree[node].prop!=-1)
- {
- node_update(node,start,eend);
- }
- int mid = (start+eend)>>1;
- int nleft = node<<1;
- lld res=0;
- if(right<=mid)
- {
- res+=query(nleft,start,mid,left,right);
- }
- else if(left>mid)
- {
- res+=query(nleft+1,mid+1,eend,left,right);
- }
- else
- {
- res+=query(nleft,start,mid,left,mid);
- res+=query(nleft+1,mid+1,eend,mid+1,right);
- }
- tree[node].sum = tree[nleft].sum+tree[nleft+1].sum;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement