Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int carry[400025][3];
- int ans;
- void query(int at, int L, int R, int l, int r){
- if( L>=l && R<=r ){
- //cout<<L<<" "<<R<<"\n";
- ans+=carry[at][0];
- return;
- }
- if(L==R)return;
- int mid = (L+R)/2;
- query(at*2,L,mid,l,r);
- query(at*2+1,mid+1,R,l,r);
- }
- void update(int at, int L, int R, int l, int r,int inc ){
- if(L>r || R<l)return ;
- if(l<=L && r>=R){
- int t0 = carry[at][0];
- int t1 = carry[at][1];
- int t2 = carry[at][2];
- carry[at][0]=t2;
- carry[at][1]=t0;
- carry[at][2]=t1;
- lazy[at]+=inc;
- return ;
- }
- if(L==R)return;
- int mid = (L+R)/2;
- update(at*2,L,mid,l,r);
- update(at*2+1,mid+1,R,l,r);
- carry[at][0]=carry[at*2][0]+carry[at*2+1][0];
- carry[at][1]=carry[at*2][1]+carry[at*2+1][1];
- carry[at][2]=carry[at*2][2]+carry[at*2+1][2];
- }
- void build(int at , int L, int R){
- if(L==R){
- carry[at][0]=1;
- return;
- }
- int mid = (L+R)/2;
- build(at*2,L,mid);
- build(at*2+1,mid+1,R);
- carry[at][0]=carry[at*2][0]+carry[at*2+1][0];
- carry[at][1]=carry[at*2][1]+carry[at*2+1][1];
- carry[at][2]=carry[at*2][2]+carry[at*2+1][2];
- }
- int main(){
- ios::sync_with_stdio(false);
- cin.tie(0);
- int t;
- cin>>t;
- //getchar();
- for(int tt=0;tt<t;tt++){
- int n;
- cin>>n;
- cout<<"Case "<<tt+1<<":\n";
- build(1,1,n);
- int q;
- cin>>q;
- for(int i=0;i<q;i++){
- int type,I,J;
- cin>>type>>I>>J;
- if(type==0)update(1,1,n,I+1,J+1);
- else {
- ans = 0;
- query(1,1,n,I+1,J+1);
- cout<<ans<<"\n";
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement