感激不尽
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls tr[now].lso
#define rs tr[now].rso
struct nood{
ll z,lso,rso,siz,sum,cd;
}tr[16000000];
ll n,m,cnt,L,R,K,a[20000000],rt[20000000],tot,anss=0;
ll b[20000000],q;
vector<ll>Q[2000000],H[2000000];
ll bui(ll l,ll r,ll &now){
now=++cnt;tr[now].cd=tr[now].sum=0;
if(l==r){
return now;
}
ll mid=(l+r)>>1;
tr[now].lso=bui(l,mid,ls);
tr[now].rso=bui(mid+1,r,rs);
return now;
}
ll update(ll &now,ll lst,ll l,ll r,ll pos,ll val,ll z){
//当前节点 now,上一个版本对应节点 lst,左端点 l,右端点 r,修改的位置 pos 和修改的值 val
now=++cnt;
tr[now]=tr[lst];
tr[now].cd+=val;
tr[now].sum+=z;
if(l==r){
return now;
}
ll mid=(l+r)>>1;
if(pos<=mid){
tr[now].lso=update(ls,tr[lst].lso,l,mid,pos,val,z);
}
else{
tr[now].rso=update(rs,tr[lst].rso,mid+1,r,pos,val,z);
}
return now;
}
void que(ll now,ll l,ll r,ll pos){
ll mid=(l+r)>>1;
if(l==r){
anss+=tr[now].sum;
return;
}
if(tr[ls].cd>pos){
que(ls,l,mid,pos);
}
else if(tr[ls].cd==pos){
anss=tr[ls].sum;
return;
}
else{
anss+=tr[ls].sum;
que(rs,mid+1,r,pos-tr[ls].cd);
}
}
int main(){
// freopen("P3168_1.in","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>m>>n;
ll s,e,p;
for(int i=1;i<=m;i++){
cin>>s>>e>>p;
Q[s].push_back(i);
H[e+1].push_back(i);
a[i]=p;b[i]=a[i];
}
sort(b+1,b+m+1);
ll q=unique(b+1,b+m+1)-b-1;
bui(1,q,rt[0]);
for(int i=1;i<=n;i++){
rt[i]=rt[i-1];
ll len=Q[i].size();
for(int j=0;j<len;j++){
ll lss=lower_bound(b+1,b+1+q,a[Q[i][j]])-b;
update(rt[i],rt[i],1,q,lss,1,a[Q[i][j]]);
}
len=H[i].size();
for(int j=0;j<len;j++){
ll lss=lower_bound(b+1,b+1+q,a[H[i][j]])-b;
update(rt[i],rt[i],1,q,lss,-1,-a[H[i][j]]);
}
}
ll xx,aa,bb,cc,pre=1,kk;
for(int i=1;i<=n;i++){
cin>>xx>>aa>>bb>>cc;
kk=1+(aa*pre+bb)%cc;
if(tr[rt[xx]].cd<=kk){
anss=tr[rt[xx]].sum;
cout<<tr[rt[xx]].sum<<"\n";
}
else{
anss=0;
que(rt[xx],1,q,kk);
cout<<anss<<"\n";
}
pre=anss;
}
}