标签:pre 位置 Hash 插入 int 查集 tokitsukaze 父亲
题目链接
题意:中文题面
题解:这题很巧妙,用并查集维护每一个位置的下一个最近的没有放数字的位置(包括本身)。所以当我们要插入一个元素时,直接找到他的父亲(他父亲可能是本身),也就是他后面的第一个为空的位置,然后在此位置插入元素。此时他父亲也被插入了元素,所以我们要更新他父亲,找到他父亲下一个位置的父亲(这个父亲一定是空位置),这样就能保证每次插入都是最近的为空的位置了。
#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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。