Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("O3")
- #include<bits/stdc++.h>
- #define rc(x) return cout<<x<<endl,0
- #define pb push_back
- #define in insert
- #define er erase
- #define fd find
- #define fr first
- #define sc second
- typedef long long ll;
- typedef long double ld;
- const ll INF=0x3f3f3f3f3f3f3f3f;
- const ll llinf=(1LL<<61);
- const int inf=(1<<30);
- const int nmax=5e5+50;
- const int mod=1e9+7;
- using namespace std;
- int n,i,a[nmax],st[10*20*nmax],lch[10*20*nmax],rch[10*20*nmax],q,t,x,y,nds,r,rt[nmax],v,rev;
- int nlf(int x)
- {
- int p=++nds;
- lch[p]=rch[p]=0;
- st[p]=x;
- return p;
- }
- int npr(int l,int r)
- {
- int p=++nds;
- lch[p]=l,rch[p]=r;
- st[p]=st[l]+st[r];
- return p;
- }
- int build(int l,int r)
- {
- if(l==r)return nlf(a[l]);
- int mid=(l+r)/2;
- return npr(build(l,mid),build(mid+1,r));
- }
- int upd(int nod,int l,int r,int p)
- {
- if(l==r)return nlf(a[l]);
- int mid=(l+r)/2;
- if(p<=mid)return npr(upd(lch[nod],l,mid,p),rch[nod]);
- else return npr(lch[nod],upd(rch[nod],mid+1,r,p));
- }
- int qry(int nod,int l,int r,int tl,int tr)
- {
- if(tr<l || tl>r)return 0;
- if(tl<=l && r<=tr)return st[nod];
- int mid=(l+r)/2;
- int v=0;
- if(tl<=mid)v=qry(lch[nod],l,mid,tl,tr);
- if(tr>mid)v+=qry(rch[nod],mid+1,r,tl,tr);
- return v;
- }
- int rngcpy(int nod,int l,int r,int old,int tl,int tr)
- {
- if(l>tr || r<tl)return nod;
- if(tl<=l && r<=tr)return old;
- int mid=(l+r)/2;
- return npr(rngcpy(lch[nod],l,mid,lch[old],tl,tr),rngcpy(rch[nod],mid+1,r,rch[old],tl,tr));
- }
- int main()
- {
- //freopen("sol.in","r",stdin);
- //freopen("sol.out","w",stdout);
- ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
- cin>>n;
- for(i=1;i<=n;i++)cin>>a[i];
- rt[++r]=build(1,n);
- cin>>q;
- while(q--)
- {
- cin>>t>>x>>y>>v;
- if(t==1)
- {
- rev=rngcpy(rt[r],1,n,rt[x+1],1,n);
- a[y]+=v;
- rt[++r]=upd(rev,1,n,y);
- }
- else cout<<qry(rt[x+1],1,n,y,v)<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement