题目描述
测试样例
Sample Input
6
push 1
inc 1 2
push 2
inc 2 2
pop
pop
Sample Output
4
5
解题思路
数组模拟栈,对于将处于栈底的前k个整数加x来说,根据本题数据量暴力for循环肯定是行不通。所以采用延迟更新的思想,输出时才加上x,然后将标记下放并清零。
AC代码
#include<cstdio>
#include<cstring>
const int MAXN=2e5+5;
int stack[MAXN],add[MAXN];
char s[20];
int x,k,ind=0;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",&s);
if(s[1]=='u')//push
{
scanf("%d",&x);
stack[++ind]=x;
}
else if(s[1]=='o')//pop
{
printf("%d\n",stack[ind]+add[ind]);
add[ind-1]+=add[ind]; //标记下放
add[ind]=0; //标记清零
--ind;
}
else//inc
{
scanf("%d%d",&k,&x);
add[k]+=x;
}
}
return 0;
}