bzoj 2054: 疯狂的馒头

来源:互联网 发布:淘宝定金不退 编辑:程序博客网 时间:2024/06/11 02:42

并查集加速查找

#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=(n);i++)using namespace std;const int maxn=1000015;int col[maxn],n,m,p,q,f[maxn];inline int find(int x){return f[x]==x ? x : f[x]=find(f[x]);}int main(){    scanf("%d%d%d%d",&n,&m,&p,&q);    rep(i,1,n+1)f[i]=i;    for(int i=m;i>=1;i--){        int l=(1ll*i*p+q)%n+1,r=(1ll*i*q+p)%n+1;        if(l>r)swap(l,r);        for(int j=find(l);j<=r;j=find(f[j])){            col[j]=i;            f[j]=j+1;    ///        }    }    rep(i,1,n)printf("%d\n",col[i]);    return 0;}
0 0