#include<bits/stdc++.h>
#define int long long
#define iit std::set<odt>::iterator
inline int read(){
int s=0;
int w=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())
if(ch=='-')
w=-1;
for(;ch>='0'&&ch<='9';ch=getchar())
s=s*10+ch-'0';
return s*w;
}
void write(int x) {
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
class odt{
public:
int l,r;
mutable int v;
odt(int L=0,int R=-1,int V=0):l(L),r(R),v(V){}
friend bool operator<(odt a,odt b){
return a.l<b.l;
}
};//初始化(可以这么理解
std::set<odt>s;
iit split(int pos){
iit it=s.lower_bound(pos);
if(it!=s.end()&&it->l==pos)
return it;
--it;
if(pos>it->r)
return s.end();
int l=it->l,r=it->r,v=it->v;
s.erase(it);
s.insert(odt(l,pos-1,v));
return s.insert(odt(pos,r,v)).first;
}//分裂
void assign(int l,int r,int v){
iit rr=split(r+1);
iit ll=split(l);
s.erase(ll,rr);
s.insert(odt(l,r,v));
}//区间推平
int f(int l,int r,int v){
iit ll=split(l);
iit rr=split(r+1);
int cnt=v;
for(iit it=ll;it!=rr;it++){
cnt-=((it->r)-(it->l)+1);
if(cnt<=0)
return (it->v);
}
}
int qpow(int b,int p,int k){
long long ans=1,tmp=b%k;
tmp%=k;
while(p>0){
if(p&1)
ans=ans*tmp%k;
tmp=tmp*tmp%k;
p=(p>>1);
}
return ans%k;
}
void add(int l,int r,int v){
iit ll=split(l);
iit rr=split(r+1);
for(iit it=ll;it!=rr;it++)
(it->v)+=v;
}
int qwq(int l,int r,int x,int y){
iit ll=split(l);
iit rr=split(r+1);
int sum=0;
for(iit it=ll;it!=rr;it++)
sum+=qpow((it->v)%y,x,y)%y;
return sum%y;
}
int n,m;
int seed;
int vmax;
int rd(){
int ret=seed;
seed=(seed*7+13)%1000000007;
// std::cout<<seed<<"\n";
return ret;
}
signed main(){
n=read();
m=read();
seed=read();
vmax=read();
for(int i=1;i<=n;i++)
s.insert((odt){i,i,rd()%vmax+1});
while(m--){
int op=rd()%4+1;
int l=rd()%n+1;
int r=rd()%n+1;
int x=0;
int y=0;
if(l>r)
std::swap(l,r);
if(op==3)
x=(rd()%(r-l+1))+1;
else
x=(rd()%vmax)+1;
if(op==4)
y=(rd()%(vmax))+1;
if(op==1)
add(l,r,x);
if(op==2)
assign(l,r,x);
if(op==3){
write(f(l,r,x));
puts("");
}
if(op==4){
write(qwq(l,r,x,y));
puts("");
}
}
return 0;
}
结果如下:
#3
Wrong Answer.wrong answer 1st numbers differ - expected: '375432604', found: '895750872'