https://ac.nowcoder.com/acm/contest/11253/K
详解请参考此处
AC代码
using namespace std;
int n, k, p, x;
int a[1000005], b[1000005], s[1000005];
int main(){
scanf("%d%d", &n, &k);
for (int i = 0; i < k; ++i) {
scanf("%d%d", &p, &x);
b[p] = x;
}
for (int i = 1; i <= n; ++i) {
if(!b[i]){
b[i] = b[i-1] + 1;
}else if(b[i] > b[i-1] + 1){
printf("-1\n");
return 0;
}
}
int cnt = 0, top = 0;
for (int i = n; i >= 1; i--) {
// 将数放入栈中,使其满足b[i]的条件
while (b[i] > top){
s[++top] = ++cnt;
}
a[i] = s[top];
top--;
}
for (int i = 1; i <= n; ++i) {
printf("%d ", a[i]);
}
return 0;
}