rt,本蒟蒻写的暴力跑了全谷最优解150ms,即使不开O2也只有338ms,比所有正解都快。
代码如下
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
namespace IO{
const int maxn=1e6;char *p1,*p2,buf[maxn];
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)?EOF:*p1++)
int read(){
int k=0;char c;
while(!isdigit(c=gc()));
while(isdigit(c))k=k*10+(c^48),c=gc();
return k;
}
void write(ll k,char c){
char st[21],top=0;
do{
st[++top]=(k%10)^48;
k/=10;
}while(k);
while(top)putchar(st[top--]);
putchar(c);
}
}
const int N=1e5+10,MX=1e7;
int n,m,x,y,l,r,k,cnt,a,b,c;
struct S{
int l,r,k;
}s[N];
ll ans=1;
ll solve(int x,int k){
int cnt=0;ll res=0;
for(int i=1;k&&i<=n;++i)
if(s[i].l<=x&&x<=s[i].r)
res+=s[i].k,--k;
return res;
}
int main(){
n=IO::read(),m=IO::read();
for(int i=1;i<=n;++i) s[i]={IO::read(),IO::read(),IO::read()};
sort(s+1,s+1+n,[&](S x,S y){return x.k<y.k;});
while(m--){
x=IO::read(),a=IO::read();
b=IO::read();c=IO::read();
k=1+(a*ans+b)%c;
IO::write(ans=solve(x,k),'\n');
}
return 0;
}