题目:
题意:
给出已经去除了几个数的一个序列,任务是将去除的数字插回去补全这个序列,输出字典序排在第一的那个补全的序列。
例如:
样例输入:
5 3
1 4 2
样例输出:
1 3 4 2 5
思路:
用数组存一下给出的序列,用一个队列存一下被去除的数字的序列(由小到大排列),然后分别比较两个容器的第一个元素,那个小就先输出哪一个,知道两个容器中的元素都输出完毕。
代码:

#include <bits/stdc++.h> #define inf 0x3f3f3f3f #define FRE() freopen("in.txt","r",stdin) using namespace std; typedef long long ll; const int maxn = 1e5+10; int a[maxn],vis[maxn]; int main(){ //FRE(); int n,m; scanf("%d%d",&n,&m); for(int i = 0; i<m; i++){ scanf("%d",&a[i]); vis[a[i]] = 1; } queue<int> que; for(int i = 1; i<=n; i++){ if(vis[i] == 0){ que.push(i); } } int cnt = 0; while(cnt<m && !que.empty()){ if(a[cnt] < que.front()){ printf("%d ",a[cnt++]); } else{ printf("%d ",que.front()); que.pop(); } } //将剩余的元素全部输出出来 while(cnt<m){ printf("%d ",a[cnt++]); } while(!que.empty()){ printf("%d ",que.front()); que.pop(); } return 0; } /* PutIn: 5 3 1 4 2 PutOut: 1 3 4 2 5 PutIn: 7 4 6 4 2 1 PutOut: 3 5 6 4 2 1 7 */