首页 > 试题广场 >

香槟塔

[编程题]香槟塔
  • 热度指数:3244 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
节日到啦,牛牛和妞妞邀请了好多客人来家里做客。
他们摆出了一座高高的香槟塔,牛牛负责听妞妞指挥,往香槟塔里倒香槟。
香槟塔有个很优雅的视觉效果就是如果这一层的香槟满了,就会从边缘处往下一层流去。
妞妞会发出两种指令,指令一是往第x层塔内倒体积为v的香槟,指令二是询问第k层塔香槟的体积为多少。
告诉你香槟塔每层香槟塔的初始容量,你能帮牛牛快速回答妞妞的询问吗?

输入描述:
第一行为两个整数n,m。表示香槟塔的总层数和指令条数。
第二行为n个整数ai,表示每层香槟塔的初始容量。
第三行到第2+m行有两种输入,一种输入是“2 x v”表示往第x层倒入体积为v的香槟;另一种输入是“1 k”表示询问第k层当前有多少香槟。
1 <= n, m <= 1000。
1 <= n ,m <= 200000,1 <= ai ,v <= 1000000000。


输出描述:
对于每个询问,输出一个整数,表示第k层香槟的容量。
示例1

输入

1 2
8
2 1 9
1 1

输出

8
示例2

输入

5 4
1 2 2 10 1
1 3
2 2 5
2 4 3
1 4

输出

0
4
var line = readline().split(" ");
var n = line[0];
var m = line[1];
var arr = readline().split(" ").map(Number);
var resArr = [];
var i = m;
while(i>0){
    var zl = readline()
    zl = zl?zl.split(" ").map(Number):[]
    if(zl.length>1){
        var x = zl[1]-1
        if(zl[0]==1){
            console.log(resArr[x]?resArr[x]:0)
        }else if(zl[0]==2){
            var v = zl[2]
            for(var j=x;j<n;j++){
                resArr[j]=resArr[j]?resArr[j]:0;
                if(resArr[j]+v>arr[j]){
                    v = resArr[j]+v-arr[j]
                    resArr[j] = arr[j]
                }else{
                    resArr[j] += v;
                    break;
                }
            }
        }
    }
    i--;
}
发表于 2020-04-07 13:48:27 回复(0)