有一长串蛇。最初,队列是空的。
您将获得 Q 个查询,这些查询应按照给定的顺序进行处理。
有三种类型的查询:
-类型 1 :以“1L”形式给出。将长度为 l 的Snake添加到队列的末尾。
如果队列在添加之前为空,则新添加的snake的头部位置为 0 ,否则,它是队列中最后一条蛇的头部坐标与最后一条蛇的长度之和。-类型 2 :以“2”形式给出。排在队伍前面的蛇离开了队伍。
保证此时队列不为空。设 m 为离开的蛇的长度,则队列中剩余的每条蛇的头部坐标减少 m 。-类型 3 :以“3 K”形式给出。输出队列前面第 k 条蛇的头部坐标。
保证此时队列中至少有 k 条蛇。
-对于 1 类型的查询, 1≤l≤109
-对于 2 类型的查询,保证队列不为空。
-对于 3 类型的查询,设 n 为队列中蛇的数量,则 1≤k≤n 。
-所有输入值均为整数。
7
1 5
1 7
3 2
1 3
1 4
2
3 3
5
10
-第一个查询:将长度为 5 的snake添加到队列中。
因为队列是空的,所以这条蛇的头部坐标是 0 。
-第二个查询:长度为 7 的蛇被添加到队列中。在添加之前,最后一条蛇的头部坐标为 0 ,长度为 5 ,因此新添加的蛇的头部坐标为 5 。-第三次查询:输出从前数第二条蛇的头部坐标。
当前,按顺序排列的蛇的头部坐标为 0,5 ,因此输出 5 。-第4个查询:将长度为{36 199759}的snake添加到队列中。
在添加之前,最后一条蛇的头部坐标为 5 ,长度为 7 ,因此新蛇的头部坐标为 12 。-第5个查询:将长度为 4 的snake添加到队列中。
在添加之前,最后一条蛇的头部坐标为 12 ,长度为 3 ,因此新蛇的头部坐标为 15 。-第6个查询:前面的蛇离开队列。
剩下的蛇的长度是 5 ,所以剩下的每条蛇的头部坐标减少 5 。剩下的蛇头坐标变为 0,7,10 。
-第7次查询:输出从前面数第3条蛇的头部坐标。当前,按顺序排列的蛇的头部坐标为 0,7,10 ,因此输出 10 。
10
1 15
1 10
1 5
2
1 5
1 10
1 15
2
3 4
3 2
20
5
巨玄关
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int Q,q,x,head[N],len[N],cnt,ahead=1;
int main(){
cin>>Q;
while(Q--){
cin>>q;
if(q==1){
cin>>x;
head[cnt+1]=head[cnt]+len[cnt];
len[++cnt]=x;
}
else if(q==2) ahead++;
else{
cin>>x;
printf("%d\n",head[x+ahead-1]-head[ahead]);
}
}
return 0;
}
本蒟蒻自认为自己的代码并没什么毛病。
样例全过,但WA掉了QAQ