图片说明
题意。。。不多哔哔了,描述不清
mex(S)的值为集合S中没有出现过的最小自然数。例如,mex({1,2}) = 0、mex({0,1,2,3}) = 4
题解:我们从哪里下手呢?
首先我们可以看到a[i]严格小于等于i
再者保证a是一个不下降序列
因为所有的数小于1e6所以我们不妨开一个数组来记录一下出现过的数字
用visited数组记录出现过的数字,若出现过标记为true,没有出现过则为false
类似于我图片上的样子
图片说明

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e6+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;

int a[maxn];
bool visited[maxn];

int main()
{
     int n;
     cin>>n;
     memset(visited,false,sizeof(visited));
     for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        visited[a[i]]=true;
     }
     int pos=0;
     for(int i=1;i<=n;i++){
        if(a[i]!=a[i-1]&&i!=1) printf("%d ",a[i-1]);
        else{
            while(visited[pos]==true) pos++;
            printf("%d ",pos++);
        }
     }
     return 0;
}