博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-6375 2018 "百度之星" 初赛(A) 1002 度度熊学队列
阅读量:4537 次
发布时间:2019-06-08

本文共 2119 字,大约阅读时间需要 7 分钟。

度度熊学队列

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 750    Accepted Submission(s): 235
 

Problem Description

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

初始时有 N 个空的双端队列(编号为 1 到 N ),你要支持度度熊的 Q 次操作。
①1 u w val 在编号为 u 的队列里加入一个权值为 val 的元素。(w=0 表示加在最前面,w=1 表示加在最后面)。
②2 u w 询问编号为 u 的队列里的某个元素并删除它。( w=0 表示询问并操作最前面的元素,w=1 表示最后面)
③3 u v w 把编号为 v 的队列“接在”编号为 u 的队列的最后面。w=0 表示顺序接(队列 v 的开头和队列 u 的结尾连在一起,队列v 的结尾作为新队列的结尾), w=1 表示逆序接(先将队列 v 翻转,再顺序接在队列 u 后面)。且该操作完成后,队列 v 被清空。

 

 

Input

有多组数据。

对于每一组数据,第一行读入两个数 N 和 Q 。
接下来有 Q 行,每行 3 ~4 个数,意义如上。
N≤150000,Q≤400000
1≤u,v≤N,0≤w≤1,1≤val≤100000
所有数据里 Q 的和不超过500000

 

 

Output

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

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

 

 

Sample Input

 

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

 

 

Sample Output

 

23 -1 2333 233 23333 提示 由于读入过大,C/C++ 选手建议使用读入优化。 一个简单的例子: void read(int &x){ char ch = getchar();x = 0; for (; ch < '0' || ch > '9'; ch = getchar()); for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; }

 

 

Source

 

     直接暴力用deque,也可以自己写个deque

     直接用deque数组会超内存,用scanf()会超时,这里用了map<int,deque<int>>

     

#include
#include
#include
#include
using namespace std;int n,q;int a,w,u,ual,v,x;map
> que;void read(int &x){ char ch = getchar();x = 0; for (; ch < '0' || ch > '9'; ch = getchar()); for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';}int main(){ while(scanf("%d%d",&n,&q)!=EOF) { que.clear(); while(q--) { read(a); if(a==1) { read(u),read(w),read(ual); if(w) que[u].push_back(ual); else que[u].push_front(ual); } else if(a==2) { read(u),read(w); if(que[u].empty()) { printf("-1\n"); continue; } else if(w) { printf("%d\n",que[u].back()); que[u].pop_back(); } else{ printf("%d\n",que[u].front()); que[u].pop_front(); } } else{ read(u),read(v),read(w); if(w) { que[u].insert(que[u].end(),que[v].rbegin(),que[v].rend()); que[v].clear(); } else{ que[u].insert(que[u].end(),que[v].begin(),que[v].end()); que[v].clear(); } } } } return 0;}

 

转载于:https://www.cnblogs.com/wangtao971115/p/10358322.html

你可能感兴趣的文章
35. Search Insert Position
查看>>
awk使用
查看>>
ASP.NET Razor 视图引擎编程参考
查看>>
Vue 基础篇
查看>>
malloc_free_new_delete
查看>>
Python中的open和codecs.open
查看>>
开发Servlet的方法(2)
查看>>
asp.net mvc 伪静态添加
查看>>
EA类图与代码同步
查看>>
Android Studio 智能感知无效
查看>>
javascript 日常
查看>>
让插件帮你优化代码
查看>>
ng 动态的生成option。
查看>>
ORACLE-12C-RAC INSTALL
查看>>
自定义引用类型的Enumerable.Union调用(原创)
查看>>
抽象类实例
查看>>
react context prop-types
查看>>
Java之路——Java初接触
查看>>
2018.12.27学习JavaScript
查看>>
Cocoa编程开发者手册
查看>>