Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- const int N=200001;
- const int M=20000050;
- int clock,root[N],r[M],l[M];
- long long a[M],b[M],A,B;
- void Set(int p, int &c, int ss, int se, int qs, int qe, int u, int v)
- {
- c=++clock;
- l[c]=l[p];
- r[c]=r[p];
- a[c]=a[p];
- b[c]=b[p];
- if(qs<=ss && qe>=se)
- {
- a[c]+=u;
- b[c]+=v;
- return;
- }
- int mid=(ss+se)>>1;
- if(qs<=mid) Set(l[p],l[c],ss,mid,qs,qe,u,v);
- if(qe>mid) Set(r[p],r[c],mid+1,se,qs,qe,u,v);
- }
- void Get(int c, int ss, int se, int qi, int mark)
- {
- A+=a[c]*mark;
- B+=b[c]*mark;
- if(ss==se) return;
- int mid=(ss+se)>>1;
- if(qi<=mid) Get(l[c],ss,mid,qi,mark);
- else Get(r[c],mid+1,se,qi,mark);
- }
- int main()
- {
- int n,i,l,r,x,y,u,v,q;
- scanf("%i",&n);
- for(i=1;i<=n;i++)
- {
- scanf("%i %i %i %i %i %i",&l,&r,&x,&u,&v,&y);
- Set(root[i-1],root[i],0,N,0,l,0,x);
- Set(root[i],root[i],0,N,l+1,r,u,v);
- Set(root[i],root[i],0,N,r+1,N,0,y);
- }
- scanf("%i",&q);
- long long last=0;
- while(q--)
- {
- scanf("%i %i %i",&l,&r,&x);
- x=(x+last)%1000000000;
- int t=x;
- if(t>N) t=N;
- A=0;
- B=0;
- Get(root[l-1],0,N,t,-1);
- Get(root[r],0,N,t,1);
- last=A*x+B;
- printf("%lld\n",last);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement