SPOJ - ADALIST,双端队列入门模板!
ADALIST - Ada and List
这道题时限6.5s,激动人心啊,好多人STL一顿乱写AC,哈哈,如果熟悉双端队列的话这道题其实是很水的。
题意:n个数的数列,然后接下来Q次操作,每次可以将某个数x插入第k个位置,那后面的数往后移。也可以删除第k个位置上的数,还可以是查询第k个位置上的数。
这就是双端队列的裸模板啊。下面简单介绍一下双端队列。
deque双端队列容器
deque与vector一样,采用线性表顺序存储结构,但deque采用分块的线性存储结构来存储数据,每个deque块用map块管理。deque块在头部和尾部都可以插入和删除元素而不需要移动其他元素。使用deque需要声明头文件包含“#include<deque>”。
1.创建deque对象:
①:创建没有任何元素的deque对象:deque<int/double>d。
②:创建具有n个元素的deque对象:deque<int>d(10)//创建具有10个整型元素的deque对象d。
③:创建具有n个元素的deque对象并赋初值:deque<int>d(10,8);10个整型元素的deque对象每个元素值为8。
2.插入元素
①:使用push_back()从尾部插入元素,会不断扩张队列。
②:使用push_front()从头部插入元素,其余元素后移。
③:d.insert(q.begin()+k,x)//从中间k位置插入元素x。
3.遍历元素
①:以数组形式遍历:for(int i=0;i<d.size();i++) cout<<d[i]<<" ";
②:以前向迭代器的方式遍历:for(it=d.begin();it!=d.end();it++) cout<<*it<<" ";//it为迭代器,声明省略。
③:采用反向迭代器对双端队列容器进行反向遍历。
for(deque<int>::reverse_iterator rit=d.rbegin();rit!=q.rend();rit++) cout<<*rit<<" ";
4.删除元素:从首部、尾部、中间删除,也可以清空双端对列容器。
①:采用pop_front()从头部删除元素。
②:采用pop_back()从尾部删除元素。
③:使用erase()从中间删除元素,其参数是迭代器位置。d.erase(d.begin()+k)。
④:清空deque对象:d.clear()。
deque容器有基本常用操作都在这了,熟悉了这些这个题就是水题了,不过也要看时间复杂度,对于时间复杂度较高的题还是不建议使用stl。
int main()
{
int n,Q,k,p,x;
while(~scanf("%d%d",&n,&Q))
{
deque<int>q;
for(int i=1; i<=n; i++)
{
scanf("%d",&x);
q.push_back(x);
}
while(Q--)
{
scanf("%d",&k);
if(k==1)
{
scanf("%d%d",&k,&x);
q.insert(q.begin()+k-1,x);
}
else if(k==2)
{
scanf("%d",&k);
q.erase(q.begin()+k-1);
}
else
{
scanf("%d",&k);
printf("%d\n",q[k-1]);
}
}
}
return 0;
}
SPOJ - ADALIST,双端队列入门模板!的更多相关文章
- 关于双端队列 deque 模板 && 滑动窗口 (自出)
嗯... deque 即为双端队列,是c++语言中STL库中提供的一个东西,其功能比队列更强大,可以从队列的头与尾进行操作... 但是它的操作与队列十分相似,详见代码1: 1 #include < ...
- SPOJ - ADAQUEUE ,双端队列简单运用!
ADAQUEUE - Ada and Queue 表示这题是学弟带的榜,题还没看完,学弟吐了一句:这不就是双端队列嘛.于是掏出布满尘埃的<曾粽根ACM程序设计>,嗯,确实是裸题,现学现做. ...
- 8、泛型程序设计与c++标准模板库2.3双端队列容器
双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...
- 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 41844 Accepted: 12384 ...
- 《算法实战策略》-chaper19-队列、栈和双端队列
对于计算机专业的学生来说,他们一定会很熟悉一句话:程序设计 = 算法 + 数据结构.而根据笔者的理解,所谓程序设计其实就是为了编程解决实际问题,所谓算法是一种解决问题某种思维的方法,但是思维需要得到编 ...
- HDU 6375(双端队列 ~)
题意是有至多150000个双端队列,400000次简单操作,直接开会导致内存超限,所以用 STL 中的 map 和 deque ,而读入过大已经在题目中有所说明,直接用已经给出的快速读入即可.要注意的 ...
- 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 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
随机推荐
- Java .class文件的反编译与反汇编
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10840818.html 一:反编译 通常用于第三方JAR包的逆向工程. 一般我们拿到的jar包都是经过编译后 ...
- python经典一百道习题(转自奶酪博客)
无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍,就基本掌握该语言的语法了. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #Filena ...
- chrome浏览器之网络面板
这篇指导向你展示怎样检测网络张状况或者在chrome开发工具的网络面板中尽可能的优化网页. 排列的或受阻的请求 症状:同时发出六个请求.之后有一系列的请求排队或受阻.一旦最先的六个请求中有一个响应结束 ...
- Android setVisibility(View.GONE)无效的问题及原因分析
解决方案:可以在setVisibility()之前调用clearAnimation()方法清除掉动画,或setFillAfter(false)(时间上该函数内部也调用了clearAnimation() ...
- 打开一个本地apk进行安装
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); File file = new File(Environment ...
- iOS上线check_list
iOS 上线前 check_list 类型 序号 检查项 结果(pass/no) 安装 卸载 1 非越狱环境下的安装.卸载 2 越狱环境下的安装.卸载 3 安装文件检查,无泄漏用户信息的隐患 4 卸载 ...
- win7 x64和win10 x64 windbg 本地调试记录
今天看CSDN和某文档看了win7 64位 和win10 64位 的windbg本地调试内核的办法 win7 x64 Step1:kdbgctrl –db Step2:kdbgctrl –e Step ...
- 使用JDK自带的工具jstack找出造成运行程序死锁的原因
Java多线程编程也是Java面试中经常考察的内容.刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来.如何分析造成Java多线程的原因呢?很多时候我们在怀疑 ...
- 欧拉回路/通路 Codeforces Round #288 (Div. 2)
http://codeforces.com/contest/508/problem/D 以上是题目链接 题目大意 给n个字符串看能不能链接在一起 因为 三个三个分割 所以字符串 如abc ab作为起点 ...
- nuxt 初接触
对于nuxt服务端渲染让人动心的是不会再想vue一样去定义无数的路由了这一点是挺爽的!!! 先直接晒张图 在api这块增加了一个fetch方法 它会在组件每次加载前被调用(即在服务端或切换至目标路 ...