B-tokitsukaze and Hash Table(并查集)
作者:互联网
题目链接
题意:中文题面
题解:这题很巧妙,用并查集维护每一个位置的下一个最近的没有放数字的位置(包括本身)。所以当我们要插入一个元素时,直接找到他的父亲(他父亲可能是本身),也就是他后面的第一个为空的位置,然后在此位置插入元素。此时他父亲也被插入了元素,所以我们要更新他父亲,找到他父亲下一个位置的父亲(这个父亲一定是空位置),这样就能保证每次插入都是最近的为空的位置了。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
int pre[N],ans[N];
inline void find(int &x){
while(x!=pre[x])
x=pre[x]=pre[pre[x]];
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
pre[i]=i;
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
int t1=x%n;
find(t1);
int t2=(t1+1)%n;
find(t2);
ans[t1]=x;
if(t1!=t2) pre[t1]=t2;
}
for(int i=0;i<n;i++) printf("%d ",ans[i]);
}
标签:pre,位置,Hash,插入,int,查集,tokitsukaze,父亲 来源: https://blog.csdn.net/qq_42129242/article/details/100523522