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

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

①11 uu ww valval 在编号为 uu 的队列里加入一个权值为 valval 的元素。(w=0w=0 表示加在最前面,w=1w=1 表示加在最后面)。

②22 uu ww 询问编号为 uu 的队列里的某个元素并删除它。( w=0w=0 表示询问并操作最前面的元素,w=1w=1 表示最后面)

③33 uu vv ww 把编号为 vv 的队列“接在”编号为 uu 的队列的最后面。w=0w=0 表示顺序接(队列vv 的开头和队列 uu 的结尾连在一起,队列vv 的结尾作为新队列的结尾), w=1w=1 表示逆序接(先将队列 vv 翻转,再顺序接在队列 uu 后面)。且该操作完成后,队列 vv 被清空。

Input有多组数据。

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

接下来有 QQ 行,每行 33~44 个数,意义如上。

N≤150000,Q≤400000N≤150000,Q≤400000

1≤u,v≤N,0≤w≤1,1≤val≤1000001≤u,v≤N,0≤w≤1,1≤val≤100000

所有数据里 QQ 的和不超过500000500000 
Output对于每组数据的每一个操作②,输出一行表示答案。

注意,如果操作②的队列是空的,就输出−1−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';
} 题意:题目中说的很清楚了 双端队列代码:关闭同步流也过不去,后来用scanf输入且C++交能过
 #include<deque>
#include<iostream>
using namespace std; deque<int> d[];
int main()
{
// std::ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
int n,m;
while(~scanf("%d %d",&n,&m))
{
// d.clear();
for(int i=; i<=n; i++)
d[i].clear();
int x,u,v,w,val;
for(int i=; i<m; i++)
{
scanf("%d",&x);
if(x==)
{
scanf("%d %d %d",&u,&w,&val);
if(w==)//加在最前面
{
d[u].push_front(val);
}
else if(w==)//在最后面
{
d[u].push_back(val);
}
}
else if(x==)
{
scanf("%d %d",&u,&w);
if(d[u].empty())
{
cout<<-<<endl;
continue;
} if(w==)//询问并操作del最前面的元素,询问要求输出
{
cout<<d[u].front()<<endl;
d[u].pop_front();
}
else if(w==)//最后面
{
cout<<d[u].back()<<endl;
d[u].pop_back();
}
}
else if(x==)//该操作完成后,队列v被清空
{
scanf("%d %d %d",&u,&v,&w);
if(w==)//队列v的开头和队列u的结尾连在一起
//队列v的结尾作为新队列的结尾
{
while(!d[v].empty())//这边注意一下
{
d[u].push_back(d[v].front());
d[v].pop_front();
}
}
else if(w==)
{
while(!d[v].empty())
{
d[u].push_back(d[v].back());
d[v].pop_back();
}
}//先将队列v翻转,再顺序接在队列u后面)
}
}
}
return ;
}

 

后来查了一下,发现list占用内存比deque少,所以一开始用了list过的。

 #include<deque>
#include<list>
#include<iostream>
using namespace std; list<int>d[];
int main()
{
std::ios::sync_with_stdio(false);
int n,m;
while(cin>>n>>m)
{
// d.clear();
for(int i=; i<=n; i++)
d[i].clear();
int x,u,v,w,val;
for(int i=; i<m; i++)
{
cin>>x;
if(x==)
{
cin>>u>>w>>val;
if(w==)//加在最前面
{
d[u].push_front(val);
}
else if(w==)//在最后面
{
d[u].push_back(val);
}
}
else if(x==)
{
cin>>u>>w;
if(d[u].empty())
{
cout<<-<<endl;
continue;
} if(w==)//询问并操作del最前面的元素,询问要求输出
{
cout<<d[u].front()<<endl;
d[u].pop_front();
}
else if(w==)//最后面
{
cout<<d[u].back()<<endl;
d[u].pop_back();
}
}
else if(x==)//该操作完成后,队列v被清空
{
cin>>u>>v>>w;
if(w==)//队列v的开头和队列u的结尾连在一起
//队列v的结尾作为新队列的结尾
{
// while(!d[v].empty())//这边注意一下
// {
// d[u].push_back(d[v].front());
// d[v].pop_front();
// }
d[u].insert(d[u].end(),d[v].begin(),d[v].end());
d[v].clear();
}
else if(w==)
{
// while(!d[v].empty())
// {
// d[u].push_back(d[v].back());
// d[v].pop_back();
// }
d[u].insert(d[u].end(),d[v].rbegin(),d[v].rend());
d[v].clear();
}//先将队列v翻转,再顺序接在队列u后面)
}
}
}
return ;
}

而且内存比题目规定的少好多。。所以应该用deque是可以写的,但是我一直超内存。

题目规定:
 

HDU-6375-度度熊学队列-双端队列deque/list的更多相关文章

  1. hdu 6375 度度熊学队列 (链表模拟)

    度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣.  初始时有 N 个空的双端队列(编号为 1 到 N ),你要支持度度熊的 Q 次操作. ①1 u w val 在编号为 u 的队列里加入一个 ...

  2. 用python实现栈/队列/双端队列/链表

    栈是元素的有序集合,添加操作与移除操作都发生在其顶端,先进后出栈操作:创建空栈,增删(顶端),查(顶端元素,元素个数,是否为空)应用:将十进制数转换成任意进制数 class Stack: # 用列表创 ...

  3. hdu 5380 Travel with candy(双端队列)

    pid=5380">题目链接:hdu 5380 Travel with candy 保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量. ...

  4. 计蒜客 A2232.程序设计:蒜厂年会-单调队列(双端队列(STL deque)实现)滑窗维护最小前缀和

    程序设计:蒜厂年会 问答问题反馈 只看题面 16.79% 1000ms 262144K   在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币. ...

  5. hdu 6375 百度之星 度度熊学队列

    题目链接 Problem Description 度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣. 初始时有 N 个空的双端队列(编号为 1 到 N ),你要支持度度熊的 Q 次操作. ①1 ...

  6. PHP双向队列,双端队列代码

    <?php /**  * User: jifei  * Date: 2013-07-30  * Time: 23:12 */ /**  * PHP实现双向队列,双端队列  * 双端队列(dequ ...

  7. python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...

  8. C++泛化双端队列

    循环双端队列 双端队列可以在队首和队尾进行入队操作.出队操作的特殊队列. 循环双端队列是充分利用空间,使用格外的数据存储队头和队尾,这里利用数组进行实现. 循环双端队列(CircleQueue.h) ...

  9. HDU 6375(双端队列 ~)

    题意是有至多150000个双端队列,400000次简单操作,直接开会导致内存超限,所以用 STL 中的 map 和 deque ,而读入过大已经在题目中有所说明,直接用已经给出的快速读入即可.要注意的 ...

随机推荐

  1. CSIC_716_20191128【多态、绑定与非绑定方法、isinstance与issubclass 】

    多态 what: 同一个事物有不同的形态. 多态的目的:在不知道对象具体类型的情况下,统一对象调用方法的规范.(通俗讲,即规定实现同样功能的方法,一定要起同样的名字). 多态的表现形式之一就是继承,先 ...

  2. C# 模拟http请求网页数据 [网页爬虫]

    using System; using System.Collections.Specialized; using System.IO; using System.Linq; using System ...

  3. 10.RabbitMQ Fanout类型交换机

    Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上.       Producer.java package com.test.fanout;   import co ...

  4. PMP-49个过程快速导览

    启动过程组 名正言顺 人鬼佛神 01 -4.1制定项目章程 -授权PM,启动项目 ● 编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程 ● 明确项目与组织战略目标之间的联系,确立 ...

  5. C++之STL(标准模板库)

    STL:standard Template Lib 一.vector <1> 特点 <2> 常用函数: <3> 遍历方法: 1.for循环 2.迭代器 <4& ...

  6. Java-Class-C:org.springframework.web.client.RestTemplate

    ylbtech-Java-Class-C:org.springframework.web.client.RestTemplate 1.返回顶部 1. org.springframework.web.c ...

  7. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  8. ADIS16405BMLZ

    GND,VCC,CS,DOUT,SCLK,DIN

  9. 安装mongo

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_40101530/articl ...

  10. 案例 查询QC(query_cache)

    案例: 数据库版本 5.7.23 16c 64g 按月分区表,做压力测试 开启QC之前: select * from a where aa=xxx; QPS:每秒处理查询的数量 3000+ 开启之后 ...