at abc-C求助 蒟蒻世界观已破碎
  • 板块题目总版
  • 楼主chu_yh
  • 当前回复5
  • 已保存回复6
  • 发布时间2025/1/18 21:15
  • 上次更新2025/1/18 21:21:34
查看原帖
at abc-C求助 蒟蒻世界观已破碎
1271341
chu_yh楼主2025/1/18 21:15

题意

问题陈述

有一长串蛇。最初,队列是空的。

您将获得 QQ 个查询,这些查询应按照给定的顺序进行处理。

有三种类型的查询:

-类型 11 :以“1L”形式给出。将长度为 ll 的Snake添加到队列的末尾。

如果队列在添加之前为空,则新添加的snake的头部位置为 00 ,否则,它是队列中最后一条蛇的头部坐标与最后一条蛇的长度之和。-类型 22 :以“2”形式给出。排在队伍前面的蛇离开了队伍。

保证此时队列不为空。设 mm 为离开的蛇的长度,则队列中剩余的每条蛇的头部坐标减少 mm 。-类型 33 :以“3 K”形式给出。输出队列前面第 kk 条蛇的头部坐标。

保证此时队列中至少有 kk 条蛇。

约束

  • 1Q3×1051 \leq Q \leq 3 \times 10^{5}

-对于 11 类型的查询, 1l1091 \leq l \leq 10^{9}

-对于 22 类型的查询,保证队列不为空。

-对于 33 类型的查询,设 nn 为队列中蛇的数量,则 1kn1 \leq k \leq n

-所有输入值均为整数。

Sample Input 1

7
1 5
1 7
3 2
1 3
1 4
2
3 3

示例输出1

5
10

-第一个查询:将长度为 55 的snake添加到队列中。

因为队列是空的,所以这条蛇的头部坐标是 00

-第二个查询:长度为 77 的蛇被添加到队列中。在添加之前,最后一条蛇的头部坐标为 00 ,长度为 55 ,因此新添加的蛇的头部坐标为 55 。-第三次查询:输出从前数第二条蛇的头部坐标。

当前,按顺序排列的蛇的头部坐标为 0,50, 5 ,因此输出 55 。-第4个查询:将长度为{36 199759}的snake添加到队列中。

在添加之前,最后一条蛇的头部坐标为 55 ,长度为 77 ,因此新蛇的头部坐标为 1212 。-第5个查询:将长度为 44 的snake添加到队列中。

在添加之前,最后一条蛇的头部坐标为 1212 ,长度为 33 ,因此新蛇的头部坐标为 1515 。-第6个查询:前面的蛇离开队列。

剩下的蛇的长度是 55 ,所以剩下的每条蛇的头部坐标减少 55 。剩下的蛇头坐标变为 0,7,100, 7, 10

-第7次查询:输出从前面数第3条蛇的头部坐标。当前,按顺序排列的蛇的头部坐标为 0,7,100, 7, 10 ,因此输出 1010

Sample Input 3

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

Sample Output 3

20
5

巨玄关\LARGE巨玄关

#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

2025/1/18 21:15
加载中...