最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

信息学奥赛题库- 栈的维护

C++ 少儿编程 1279浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

【题目描述】

从前有个栈,一开始是空的。

你写下了 $m$ 个操作,每个操作形如“$k;v$”,若 $k = 0$,代表往栈顶加入一个数 $v$;若$k = 1$,则代表从栈顶弹出 $v$ 个数,如果栈中的元素少于 $v$ 个,则全部弹出。

接着你又进行了 $q$ 次修改,每次你会选择一个操作,并且修改它的两个参数。

在每次修改后,你都要求出如果依次执行这些操作,最后栈中剩下的元素之和。

【输入】

第一行两个正整数$m,q$ ,分别表示操作数和修改次数。

接下来 $m$ 行,每行两个整数 $k,v$ ,代表一个操作。

接下来 $q$ 行,每行三个正整数 $c,k,v$ ,表示将第 $c$ 个操作的参数修改为 $k$ 和 $v$。

【输出】

输出 $q$ 行,每行一个整数,代表依次执行所有操作后栈中剩下的元素之和。

【输入样例】

4 3
0 1
0 2
1 2
0 3
2 0 3
3 1 1
4 1 1

【输出样例】

3
4
0

【提示】

【数据规模】

对于30%的数据,$m,q≤1000$。

对于另外20%的数据,保证执行每个$k = 1$的操作时都会弹出栈中所有元素。

对于100%的数据,$m, q ≤ 2×10^5,v ≤ 10^4$。

您必须 登录 才能发表评论!