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

原文地址:https://www.cnblogs.com/Rosebud/p/9517750.html

时间: 2024-11-05 13:34:50

51nod 1403 有趣的堆栈的相关文章

1403 有趣的堆栈

1403 有趣的堆栈 基准时间限制:1 秒 空间限制:131072 KB 分值 大家都熟悉堆栈操作.一个堆栈一般有两种操作,push和pop.假设所有操作都是合法的并且最终堆栈为空.我们可以有很多方法记录堆栈的操作, (1) 对每个pop操作,我们记录它之前一共有多少个push操作. (2) 对每个pop操作,我们记录这个被Pop的元素曾经被压上了几个. 例如:操作push, push, pop, push, push, pop, push, pop, pop, pop 用第一种方法 记录为 2

51nod1403 有趣的堆栈

看成括号序列的话第二种方法其实就是左括号和右括号之间有多少对完整的括号. #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x

有趣的堆栈

大家都熟悉堆栈操作.一个堆栈一般有两种操作,push和pop.假设所有操作都是合法的并且最终堆栈为空.我们可以有很多方法记录堆栈的操作, (1) 对每个pop操作,我们记录它之前一共有多少个push操作. (2) 对每个pop操作,我们记录这个被Pop的元素曾经被压上了几个. 例如:操作push, push, pop, push, push, pop, push, pop, pop, pop 用第一种方法 记录为 2, 4, 5, 5, 5 用第二种方法 记录为 0, 0, 0, 2, 4 这两

谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧. 不断更新,不断更新,不断更新,重要的事情说三遍. 所有题目汇总在我的 Github . 3.层叠顺序(stacking level)与堆栈上下文(stacking context)知多少? z-index 看上去其实很简单,根据 z-index 的高低决定

51nod 1420 数袋鼠好有趣【贪心】

1420 数袋鼠好有趣 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有n只袋鼠.每只袋鼠的大小用一个整数表示.一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍. 每只大袋鼠最多可以装一只袋鼠.小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了. 小袋鼠被装进大袋鼠之后就不能被我们看见了.请找出一个装袋鼠的方案,使得被看见的袋鼠最少. Input 单组测试数据. 第一行包含一个整数n(1≤n≤5*

51nod - 1420 - 数袋鼠好有趣 - 贪心 - 二分

https://www.51nod.com/Challenge/Problem.html#!#problemId=1420 一开始乱搞了一发,每个袋鼠二分找最小的能放它的,然后二分的范围从下一个开始保证不会把两个小袋鼠装在同一个里面,还过了一半的数据-- 然后才发现袋鼠并不能嵌套.想打vis标记大袋鼠跳过大袋鼠,然后样例都过不了. 又想了半天网络流,流个鬼鬼流. 看了一下别人的提示,贪心加二分. 好像我误解了别人的贪心加二分,跑得比别人还快快. 明显选的袋鼠一定是最小的那波,这样最优. 然后二分

51nod 1279 单调栈

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279 1279 扔盘子 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有一口井,井的高度为N,每隔1个单位它的宽度有变化.现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去). 盘子有几种命运:1.掉到井底.2.被卡住.3.落到别的盘子上方. 盘子

构建移动Web应用程序的技术堆栈

编写web应用程序时,有很多的技术决策.笔者最近回来编写现代Web应用程序,并希望总结一些曾经在开发周期过程中做了记录零散的想法.这篇文章是关于一套对笔者最近开发的项目有帮助的框架.笔者重温了一些最重要的框架类型,其中每一个可以展开来写一篇文章.这并不是一个广泛的现有产品相比,只是一个笔者最近使用的部分技术. 虽然笔者的重点是移动优先, 笔者认为,这套技术可以应用在一般的web应用程序. 笔者的决定和数据支持考虑了几个要求: 基于JavaScript(CoffeeScript,Dart,绝对值得

51Nod - 1381 硬币游戏

51Nod - 1381 硬币游戏 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平行线(如下图所示).两条相邻平行线之间的距离是1,硬币的半径是R,然后我们来抛硬币到桌子上,抛下之后硬币有时候会和一些直线相交(相切的情况也算是相交),有时候不会. 请你来计算一下抛一次硬币之后,该硬币和直线相交数目的期望. Input 第一行给出一个整数T,表示有T组数据(1<=T<=10000). 第2行到T+1,每行给出一个整数R.(0< R <= 10,00