HDU6375双端队列
要点分析:
1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表)
2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用
关于双端队列的声明:
使用<queue>头文件
主要用法:
deque.push_back(val);
deque.push_front(val);
deque.pop_front();
deque.pop_back();
deque.front();
deque.back();
deque.clear();
本题代码:
1 #include<iostream>
2 #include<queue>
3 #include<map>
4 using namespace std;
5
6 //const int N = 150005;
7 map<int, deque<int> > q;
8
9 void read(int &x){
10 char ch = getchar();x = 0;
11 for (; ch < '0' || ch > '9'; ch = getchar());
12 for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
13 }
14
15 int main(){
16 int N, Q;
17 while(scanf("%d%d", &N, &Q) != EOF){
18 for(int i = 1; i <= N; i++) q[i].clear();
19 for(int i = 1; i <= Q; i++){
20 int x;
21 read(x);
22 if(x == 1){
23 int u, w, val;
24 read(u);
25 read(w);
26 read(val);
27 if(w == 0){
28 q[u].push_front(val);
29 }else{
30 q[u].push_back(val);
31 }
32 }else if(x == 2){
33 int u, w;
34 read(u);
35 read(w);
36 if(q[u].empty()){
37 printf("-1\n");
38 }else{
39 if(w == 0){
40 int temp = q[u].front();
41 q[u].pop_front();
42 printf("%d\n", temp);
43 }else{
44 int temp = q[u].back();
45 q[u].pop_back();
46 printf("%d\n", temp);
47 }
48 }
49 }else{
50 int u, v, w;
51 read(u);
52 read(v);
53 read(w);
54 if(w == 0){
55 while(!q[v].empty()){
56 int temp = q[v].front();
57 q[v].pop_front();
58 q[u].push_back(temp);
59 }
60 }else{
61 while(!q[v].empty()){
62 int temp = q[v].back();
63 q[v].pop_back();
64 q[u].push_back(temp);
65 }
66 }
67 }
68 }
69 }
70 return 0;
71 }
HDU6375双端队列的更多相关文章
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- HDU 4286 Data Handler --双端队列
题意:有一串数字,两个指针,然后一些添加,删除,反转,以及移动操作,最后输出序列. 解法:可以splay做,但是其实双端队列更简便. 维护三个双端队列LE,MI,RI分别表示[L,R]序列左边,[L, ...
- 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 41844 Accepted: 12384 ...
- Java 集合深入理解(10):Deque 双端队列
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...
- BZOJ2457 BeiJing2011 双端队列
[问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...
- Fork/Join框架之双端队列
简介 ForkJoinPool管理着ForkJoinWorkerThread线程,ForkJoinWorkerThread线程内部有一个双端队列,这个双端队列主要由一个数组queue.数组下标queu ...
随机推荐
- NOI2008 志愿者招聘
文化课 + 竞赛双废物又来水题解了. 首先,对于题干中的人,很像网络流中的流量,但是他有一个每天人数的下限,我从网上借鉴(chaoxi)到了两种思路: 把下界限制转化为一条边的流量下界,这样就是最小费 ...
- STL——容器(Set & multiset)的删除 erase
set.clear(); //清除所有元素 set.erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器. set.erase(beg,end ...
- 推荐系统实践 0x0f AutoRec
从这一篇开始,我们开始学习深度学习推荐模型,与传统的机器学习相比,深度学习模型的表达能力更强,并且更能够挖掘出数据中潜藏的模式.另外.深度学习模型结构也非常灵活,能够根据业务场景和数据结构进行调整.还 ...
- php项目从github自动pull到服务器
php项目github自动pull到服务器 项目名:web 一.自动触发 1.在服务器添加脚本文件:gitpull.sh #!/bin/sh cd /www/web git reset --hard ...
- FFmpeg 初级使用
ffmpeg来处理多种媒体文件,对帧进行操作的时候非常的复杂,下面介绍下使用FFmpeg对视频文件的操作. 1,安装 windows安装ffmpeg: 下载ffmpeg文件解压文件到c盘配置环境变量C ...
- ext4和xfs文件系统的扩容和收缩
1. LVM逻辑卷管理 2. ext4文件系统 2.1 扩容CentOS6的根文件系统(ext4) 根文件系统在 /dev/VolGroup/lv_root 逻辑卷上,文件系统类型为ext4,大小为1 ...
- Thymeleaf Shiro标签
记录一下 guest标签 <shiro:guest> </shiro:guest> 用户没有身份验证时显示相应信息,即游客访问信息. user标签 <shiro:user ...
- javaScript编写9*9口诀
学习html+css+javaScript<!DOCTYPE html> <html> <head> <title>chaoba</title&g ...
- python实现贴吧顶贴机器人
前言------百度贴吧流量如何?全球最大的中文社区,虽然比不上阿里,腾讯! 此文章仅供交流学习.建议机器人用小号操作,切勿用作商业用途! 测试版本:python 3.7 64位火狐浏览器firefo ...
- python的二维数组操作--坑
用到python list的二维数组,发现有一些需要注意的地方. 第一种赋值方法: list0 = [[0]*3]*4 list0[0][1] = 1 print(list0) 输出结果为: [[0, ...