51nod 1403 有趣的堆栈
Posted rosebud
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1403 有趣的堆栈相关的知识,希望对你有一定的参考价值。
主要是能分析出这样一个结论:
每个pop根据这个元素上面被压过多少个元素,可以知道他是在前面哪个pop之前被push的。
根据这些信息可以求得每个pop到上一个pop之间有多少个push,最后求个前缀和即可。
#include <stdio.h> const int maxN=1e6+5; int N, g[maxN], h[maxN]; int main() { scanf("%d", &N); for (int i = 1; i <= N; ++i) { scanf("%d", &g[i]); if (g[i]) h[i - g[i]] += 1; else h[i] = 1; } for (int i = 2; i <= N; ++i) h[i] += h[i - 1]; for (int i = 1; i <= N; ++i) printf("%d ", h[i]); puts(""); return 0; }
以上是关于51nod 1403 有趣的堆栈的主要内容,如果未能解决你的问题,请参考以下文章