Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- const int N=100000;
- int segment[N*3];
- int segmentt[N*4];
- bool st;
- int query (int f,int t,int l,int r,int i) {
- segment[i]+=segmentt[i];
- segmentt[i]=0;
- if (f>r || t<l) return 0;
- if (l>=f && r<=t) return segment[i];
- return query(f,t,(l+r)/2+1,r,i*2+1)+query(f,t,l,(l+r)/2,i*2);
- }
- void update (int f,int t,int v,int l,int r,int i) {
- if (f>r || t<l) return;
- if (l>=f && r<=t) {
- segment[i]+=v;
- segmentt[i]=0;
- if (l!=r) {
- segmentt[i*2]=v;
- segmentt[i*2+1]=v;
- }
- return ;
- }
- update (f,t,v,(l+r)/2+1,r,i*2+1);
- update (f,t,v,l,(l+r)/2,i*2);
- }
- int main()
- {
- int n,q;
- cin>>n>>q;
- for (int i=0; i<q; i++)
- {
- cin>>st;
- if (st)
- {
- int a,b;
- cin>>a>>b;
- cout<<query(a,b,1,n,1)<<endl;
- }
- else {
- int a,b,v;
- cin>>a>>b>>v;
- update(a,b,v,1,n,1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement