lanqiao oj 185 修改数组

简介: lanqiao oj 185 修改数组

用户登录

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 1e6 +10 ;
int n ;
int a[N] ;
int s[N] ;
int find(int x){
  if(x != s[x]) s[x] = find(s[x]) ;
  return s[x] ;
}
int main(){
  cin >> n ;
  for(int i = 1 ; i <= N ;i ++) s[i] = i ; //因为我们要求的并查集可能很大,所以初始化更多一点 
  for(int i = 1 ; i <= n ;i ++){
    int x ; cin >> x ; 
    int root = find(x) ;//我们先找到这个数的根节点,根节点就是现在这个数已经排到的第几个数 
    a[i] = root ;//我们把a[i]安排根节 
    s[root] = find(root + 1) ;//因为根节点已经用了,所以我们把当前根节点的根节点,指向下一个数的根节点 
  }
  for(int i = 1 ; i <= n ;i ++) cout << a[i] <<" " ;
  cout << endl ;
}
目录
相关文章
|
8月前
《剑指Offer》JZ3 数组中重复的数字
《剑指Offer》JZ3 数组中重复的数字
31 2
|
8月前
字符串——OJ题
字符串——OJ题
83 0
|
存储
第一个只出现一次的字符(OJ题)
第一个只出现一次的字符(OJ题)
59 0
|
3月前
lanqiao OJ 239 最优包含
lanqiao OJ 239 最优包含
19 2
|
3月前
lanqiao OJ 389 摆花
lanqiao OJ 389 摆花
21 2
|
3月前
lanqiao oj 1203 小明的字符串
lanqiao oj 1203 小明的字符串
17 0
|
3月前
lanqiao OJ 1546 坐标搜寻
lanqiao OJ 1546 坐标搜寻
13 0
|
3月前
lanqiao OJ 2143 最少刷题数
lanqiao OJ 2143 最少刷题数
21 0
|
存储
数组OJ题(1)
数组OJ题(1)
63 0
|
存储 算法
数组OJ题(2)
数组OJ题(2)
128 0