#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5+1; const int M = N*81; const int lim = 2e5+1; const ll mod = 1e9; int n,q; struct Chairman_Tree { int rt[N],lc[M],rc[M]; ll w[M]; int tot; void init(){tot=0;} int build(int l,int r) { int x=++tot; w[x]=0; if(l==r) return x; int mid=(l+r)>>1; lc[x]=build(l,mid); rc[x]=build(mid+1,r); return x; } int update(int x,int l,int r,int y1,int y2,int val) { int y=++tot; w[y]=w[x];lc[y]=lc[x];rc[y]=rc[x]; if(y1<=l&&y2>=r) { w[y]+=val; return y; } int mid=(l+r)>>1; if(y1<=mid) lc[y]=update(lc[x],l,mid,y1,y2,val); if(y2>mid) rc[y]=update(rc[x],mid+1,r,y1,y2,val); return y; } ll query(int x,int l,int r,int pos) { if(l==r) return w[x]; int mid=(l+r)>>1; if(pos<=mid) return query(lc[x],l,mid,pos)+w[x]; else return query(rc[x],mid+1,r,pos)+w[x]; } }T[2]; int main() { for(int i=0;i<2;++i) { T[i].init(); T[i].rt[0]=T[i].build(0,lim); } scanf("%d",&n); for(int i=1;i<=n;++i) { int xx1,xx2,yy1,a,b,yy2; scanf("%d%d%d%d%d%d",&xx1,&xx2,&yy1,&a,&b,&yy2); int tmp; tmp=T[0].update(T[0].rt[i-1],0,lim,0,xx1,yy1); tmp=T[0].update(tmp,0,lim,xx1+1,xx2,b); T[0].rt[i]=T[0].update(tmp,0,lim,xx2+1,lim,yy2); T[1].rt[i]=T[1].update(T[1].rt[i-1],0,lim,xx1+1,xx2,a); } int q; scanf("%d",&q); ll ans=0; while(q--) { int l,r,x; scanf("%d%d%d",&l,&r,&x); x=(x+ans)%mod; int lx=min(x,lim); ans=0; ans+=T[0].query(T[0].rt[r],0,lim,lx)-T[0].query(T[0].rt[l-1],0,lim,lx); ans+=x*(T[1].query(T[1].rt[r],0,lim,lx)-T[1].query(T[1].rt[l-1],0,lim,lx)); printf("%I64d\n",ans); } return 0; }
|