P13744 [NWERC 2024] Flowing Fountain

题目描述

上周,Bill 第一次为香槟喷泉注满了香槟。 他被香槟从一个酒杯流入另一个酒杯的景象所吸引,决定在下一届世界总决赛上组织一个更大的香槟喷泉。 他已经订购了 $n$ 个容量各不相同的玻璃碗,准备将它们从上到下叠放,组成一个巨大的玻璃喷泉。 然而,他还不确定该如何向喷泉中倒入香槟。 一瓶香槟肯定不够,仅仅从顶部倒入也可能无法填满每一层碗。 Bill 想尝试不同的方式来填满喷泉,但浪费任何香槟都是一种遗憾。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/7z0ww864.png) Bill Poucher(ICPC 执行董事,右侧)。© [Huawei](https://www.huawei.com/en/news/2024/10/icpc-challenge-championship),经许可使用 ![](https://cdn.luogu.com.cn/upload/image_hosting/26v9jtqb.png) 图 F.1:样例输入 2 的示意图。第 $i$ 张图片可视化了第 $i$ 个类型为 '$\texttt{+}$' 的操作。 ::: 现在轮到你大显身手了! 你的任务是编写一个程序,模拟向给定喷泉中倒入香槟的过程。 通过这个程序,Bill 可以模拟向不同层倒入指定量的香槟。 如果某一层的碗已经装满,则多余的香槟会溢出到下方第一个容量更大的碗中。 如果下一个更大容量的碗也已装满,香槟会继续向下溢出,直到最终渗入地面,造成浪费。 此外,在模拟过程中,Bill 还希望随时查询某一层当前的香槟量。

输入格式

输入包括: - 一行包含两个整数 $n$ 和 $q$($1\leq n, q \leq 3 \times 10^5$),分别表示层数和操作数。 - 一行包含 $n$ 个互不相同的整数 $c$($1\leq c \leq 10^9$),表示每层的容量(单位:升)。 各层自上而下给出。 - 接下来 $q$ 行,每行描述一个操作。 首字符 $t$($t \in \{$'$\texttt{+}$'$, $'$\texttt{?}$'$\}$)表示操作类型。 其余内容依 $t$ 的不同而不同: - $t=$'$\texttt{+}$':后接两个整数 $\ell$ 和 $x$($1 \leq \ell \leq n$, $1 \leq x \leq 10^9$),表示 Bill 向第 $\ell$ 层倒入 $x$ 升香槟。 - $t=$'$\texttt{?}$':后接一个整数 $\ell$($1 \leq \ell \leq n$),表示 Bill 查询第 $\ell$ 层当前的香槟量。 保证至少有一个类型为 '$\texttt{?}$' 的查询。

输出格式

对于每个类型为 '$\texttt{?}$' 的查询,输出该层当前的香槟量(单位:升)。

说明/提示

由 ChatGPT 4.1 翻译