这道题非常让人伤心,发两张图就知道为什么伤心了,不想写题解了
…真是一个悲伤的故事
#include<cstdio>
#include<iostream>
using namespace std;
int N,M,p,q,fa[1001000+10],a[1001000+10];
int find(int x){
if(!fa[x]||fa[x]==x) return fa[x]=x;
return fa[x]=find(fa[x]);
}
int main(){
scanf("%d%d%d%d",&N,&M,&p,&q);
for(int i=M;i>0;i--){
int l=((long long)i*p+q)%N+1,r=((long long)i*q+p)%N+1;
if(l>r) swap(l,r);
for(int j=find(l);j<=r;j=find(j))a[j]=i,fa[j]=j+1;
}
for(int i=1;i<=N;i++) printf("%d\n",a[i]);
return 0;
}
本文通过一个具体的 C++ 程序实例展示了并查集数据结构的应用。该程序实现了并查集的基本操作,并解决了一个特定的问题,即根据一系列的规则更新数组中的元素值。文中提供的代码包括了并查集的查找和合并操作。
487

被折叠的 条评论
为什么被折叠?



