如题,救救孩子吧
#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
const int MAXN=1e5+10;
int T,n,m;
int rot,tot;
struct node{
int x,y,z;
};
bool check(node A,node B){
if(A.x==B.x){
if(A.y==B.y) return A.z<=B.z;
else return A.y<=B.y;
}
return A.x>=B.x;
}
struct fhq_treap{
int l,r;
int siz,key;
node user;
}t[MAXN];
void addtag(node OJ){
++tot;
t[tot].key=rand();
t[tot].siz=1;
t[tot].user=OJ;
}
void pushup(int i){
t[i].siz=t[t[i].l].siz+t[t[i].r].siz+1;
}
void split(int i,node v,int &l,int &r){
if(!i){
l=r=0;
return ;
}
if(check(t[i].user,v)){
l=i;
split(t[i].r,v,t[i].r,r);
}
else{
r=i;
split(t[i].l,v,l,t[i].l);
}
pushup(i);
}
int merge(int l,int r){
if(!l||!r) return l+r;
if(t[l].key<=t[r].key){
t[l].r=merge(t[l].r,r);
pushup(l);
return l;
}
t[r].l=merge(l,t[r].l);
pushup(r);
return r;
}
typedef unsigned int ui ;
ui seed,last=7;
ui randNum(ui& seed,ui last,const ui md){
seed=seed*17+last;
return seed%md+1;
}
void clear(){
node none;
none.x=none.y=none.z=0;
for(int i=1;i<=tot;i++){
t[i].l=t[i].r=0;
t[i].user=none;
}
rot=tot=0;
}
void insert(node OJ){
int l,r;
split(rot,OJ,l,r);
addtag(OJ);
rot=merge(merge(l,tot),r);
}
void debug(int i){
if(!i) return ;
debug(t[i].l);
cout<<t[i].user.x<<" "<<t[i].user.y<<" "<<t[i].user.z<<endl;
debug(t[i].r);
}
void Plus(int x,int y){
int l,r,mid;
node OJ=t[x].user;
split(rot,OJ,l,r);
OJ.z--;
split(l,OJ,l,mid);
rot=merge(l,r);
OJ.z++,OJ.x++,OJ.y+=y;
t[mid].user=OJ;
split(rot,OJ,l,r);
rot=merge(merge(l,mid),r);
}
int query(int x){
int l,r;
node OJ=t[x].user;
OJ.y--;
split(rot,OJ,l,r);
int ans=t[l].siz;
rot=merge(l,r);
return ans;
}
signed main(){
T=read();
while(T--){
n=read(),m=read(),seed=read();
clear();
for(int i=1;i<=n;i++){
node OJ;
OJ.x=OJ.y=0;
OJ.z=i;
insert(OJ);
}
while(m--){
int id=randNum(seed,last,n),x=randNum(seed,last,n);
Plus(id,x);
last=query(id);
printf("%lld\n",last);
}
}
return 0;
}