0
点赞
收藏
分享

微信扫一扫

2021牛客暑期多校训练营2-K(Stack)

​​https://ac.nowcoder.com/acm/contest/11253/K​​

​​详解请参考此处​​

​AC代码​

#include <iostream>

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;
}


举报

相关推荐

0 条评论