他们摆出了一座高高的香槟塔,牛牛负责听妞妞指挥,往香槟塔里倒香槟。
香槟塔有个很优雅的视觉效果就是如果这一层的香槟满了,就会从边缘处往下一层流去。
妞妞会发出两种指令,指令一是往第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 2 8 2 1 9 1 1
8
5 4 1 2 2 10 1 1 3 2 2 5 2 4 3 1 4
0 4
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @Author: coderjjp
* @Date: 2020-05-08 17:47
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line1[] = br.readLine().split(" ");
int n = Integer.valueOf(line1[0]);//层数
int m = Integer.valueOf(line1[1]);//总指令数
int V[] = new int[n+1];
String[] line2 = br.readLine().split(" ");
for (int i = 0; i < n; i++)
V[i+1] = Integer.valueOf(line2[i]);
int cur[] = new int[n+1];//初始体积
while (m-- > 0){
String linex[] = br.readLine().split(" ");
int order[] = new int[linex.length];
for (int i = 0; i < linex.length; i++)
order[i] = Integer.valueOf(linex[i]);
if (order[0] == 1)
System.out.println(cur[order[1]]);
else{
int rem = order[2];
for (int i = order[1]; i <= n && rem > 0; i++){
if (cur[i] == V[i])
continue;
if (rem >= V[i]-cur[i]){
rem = rem - (V[i] - cur[i]);
cur[i] = V[i];
}else {
cur[i] += rem;
rem = 0;
}
}
}
}
}
} 注意:不能用for循环,for循环的时间复杂度太大,要用while
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int ceng=sc.nextInt();
int zhiling=sc.nextInt();
int[] churong=new int[ceng];
int[] xiangrong=new int[ceng];
int j=0;
while(j<ceng){
int A1=sc.nextInt();
churong[j]=A1;
xiangrong[j]=0;
j++;
}
int z=0;
while(z<zhiling){
int gu=sc.nextInt();
if(gu==1){
int k=sc.nextInt();
int l=xiangrong[k-1];
System.out.println(l);
}else{
int b=sc.nextInt();
int x=b-1;
int v=sc.nextInt();
while(v>0&&x<ceng){
//如果 杯子已有的水<杯子 并且v<杯子-水
if(xiangrong[x]<churong[x]&&v<churong[x]-xiangrong[x]){
xiangrong[x]=xiangrong[x]+v;
v=0;
}
else {
//v=v-(杯子-水)
v=v-(churong[x]-xiangrong[x]);
xiangrong[x]=churong[x];
x++;
}
}
}
z++;
}
}
}