#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int bsz,bcnt,ans;
int a[N],bl[N],br[N],tag[N],bel[N],bsum[N];
long long n,m,p,q;
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
inline long long readl(){
long long t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
void init(){
bsz=sqrt((double)(n)),bcnt=ceil((double)(n)/bsz);
for(int i=1;i<=bcnt;i++){
bl[i]=(i-1)*bsz+1,br[i]=i*bsz;
for(int j=bl[i];j<=br[i];j++) bel[j]=i;
}
}
void add(int x,int y,int z){
if(bel[x]==bel[y]){
if(tag[bel[x]]) return;
for(int i=x;i<=y;i++){
if(a[i]) continue;
a[i]=z,bsum[bel[x]]++,ans++;
}
return;
}
for(int i=x;i<=br[bel[x]];i++){
if(tag[bel[x]]) break;
if(a[i]) continue;
a[i]=z,bsum[bel[x]]++,ans++;
}
for(int i=bl[bel[y]];i<=y;i++){
if(tag[bel[y]]) break;
if(a[i]) continue;
a[i]=z,bsum[bel[y]]++,ans++;
}
for(int i=bel[x]+1;i<bel[y];i++){
if(tag[i]) continue;
tag[i]=z,ans+=(br[i]-bl[i]+1)-bsum[i];
}
}
int main(){
n=readl(),m=readl(),p=readl(),q=readl();
init();
for(int i=m;i>=1;i--){
int x=(int)((i*p+q)%n+1),y=(int)((i*q+p)%n+1);
if(x>y) swap(x,y);
add(x,y,i);
if(ans==n){
for(int j=1;j<=n;j++){
if(a[j]) cout<<a[j]<<"\n";
else if(tag[bel[j]]) cout<<tag[bel[j]]<<" ";
else cout<<0<<"\n";
}
break;
}
}
if(ans!=n){
for(int j=1;j<=n;j++){
if(a[j]) cout<<a[j]<<"\n";
else if(tag[bel[j]]) cout<<tag[bel[j]]<<" ";
else cout<<0<<"\n";
}
}
return 0;
}
样例过了,但WK了 (炸)