求助
  • 板块灌水区
  • 楼主sansdream
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/23 14:20
  • 上次更新2024/2/23 16:01:41
查看原帖
求助
768376
sansdream楼主2024/2/23 14:20

情书学队列

题目描述


可爱的情书正在学习双端队列,他对其翻转和合并产生了很大的兴趣。

初始时有 NN 个空的双端队列(编号为 11 到 NN ),你要支持情书的 QQ 次操作。

  1. 11 uu ww valval 在编号为 uu 的队列里加入一个权值为 valval 的元素。(w=0w=0 表示加在最前面,w=1w=1 表示加在最后面)。
  2. 22 uu ww 询问编号为 uu 的队列里的某个元素并删除它。( w=0w=0 表示询问并操作最前面的元素,w=1w=1 表示最后面)
  3. 33 uu vv ww 把编号为 vv 的队列“接在”编号为 uu 的队列的最后面。w=0w=0 表示顺序接(队列 vv 的开头和队列 uu 的结尾连在一起,队列 vv 的结尾作为新队列的结尾), w=1w=1 表示逆序接(先将队列 vv 翻转,再顺序接在队列 uu 后面)。且该操作完成后,队列 vv 被清空。

输入格式


有多组数据。

对于每一组数据,第一行读入两个数 NN 和 QQ。

接下来有 QQ 行,每行 3∼43\sim4 个数,意义如上。

输出格式


对于每组数据的每一个操作 22,输出一行表示答案。

注意,如果操作 22 的队列是空的,就输出 -1 且不执行删除操作。

样例 #1

样例输入 #1

2 10
1 1 1 23
1 1 0 233
2 1 1 
1 2 1 2333
1 2 1 23333
3 1 2 1
2 2 0
2 1 1
2 1 0
2 1 1

样例输出 #1

23
-1
2333
233
23333

提示

N≤150000,Q≤400000N\leq150000,Q\leq400000

1≤u,v≤N,0≤w≤1,1≤val≤1000001\leq u, v\leq N,0\leq w\leq1, 1\leq val \leq100000

所有数据里 QQ 的和不超过 500000500000

#include<bits/stdc++.h>
#include<deque>
using namespace std;
int t,n;	
int main(){
	cin>>t;
	while(t--){
		deque<int> q;
		cin>>n;
		for(int i=1,a;i<=n;i++){
			cin>>a;
			if(q.empty()||a<q.front())
				q.push_front(a);
			else q.push_back(a);
		}
		for(auto v:q)
			cout<<v<<" ";
		cout<<endl;
	}
	return 0;
}

2024/2/23 14:20
加载中...