Codeforces Round #436 (Div. 2), problem: (D) Make a Permutation!
Posted LMissher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #436 (Div. 2), problem: (D) Make a Permutation!相关的知识,希望对你有一定的参考价值。
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int main(){
int a[210000],flag[210000],lag[210000],n;
vector<int> vec;
memset(flag,0,sizeof(flag));
memset(lag,0,sizeof(lag));
vec.clear();
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
flag[a[i]]++;
}
for(int i=1;i<=n;i++){
if(!flag[i]) vec.push_back(i);
}
if(vec.empty()){
printf("0\n");
for(int i=0;i<n;i++) i==0?printf("%d",a[i]):printf(" %d",a[i]);
printf("\n");
}
else{
int tot=0;
for(int i=0;i<n;i++){
//printf("%d\n",flag[a[i]]);
if(flag[a[i]]>1&&a[i]>vec[tot]){
flag[a[i]]--;
a[i]=vec[tot];
tot++;
}
else if(