poj2823/hdu3415 - 数据结构 单调队列】的更多相关文章

poj2823 题目链接 长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值 如果用单调队列做,求最小值时,队列应该严格递增的.所以插入时,队尾大于等于插入值的元素都应被舍弃,因为插入元素不仅小而且新,没有必要保留队尾这些又大又旧的元素. /*选C++交是5k多毫秒,但是G++就会超时.*/#include <cstdio> #include <cstring> ; int data[N]; int o1[N],o2[N]; int q[N]; int n,k;…
单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. ----------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<deque> #define rep(i,r) for(int i=0;i<r;i++) #define clr(x,c) memset…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415 题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个.从中选一个不超过k的序列,使得序列和最大,最大值相同选开始点最小的,开始点相同选长度最小的. 分析:单调队列维护在k个数之内的最小值的下标,然后一直扫一遍就行了,只要懂单调队列这题就是水题了. #include <cstdio> #include <cstring> #include <cmath> #in…
Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 32099   Accepted: 9526 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left o…
单调队列解决通过维护满足条件内的值,并保证队列里的值单调,解决一个最大最小. 让你求一个k区间长度的最大值,那么就只要搞下前缀和, sum[ i , j ] 区间的和:sum[ j ]-sum[ i - 1 ],那么就只要维护一个(从队尾到队首)单调递减队列,(插:其实这不是队列,只是有了队列的操作,然后就被叫成了单调队列),那么每次取一下队首元素(也就是最小),判断一下是不是比他大,维护一个最大值的answer. 随便搞:…
今天学习了一下单调队列这种数据结构,思想不是很难 参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html 然后自己写成了类的模板形式,并做了例题poj2823 代码如下: #include <iostream> #include <stdio.h> #include<string.h> #include<algorithm> #include<string>…
POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快得多. 一直把删除队首过期元素写在删除队尾之前,就一直WA,尼玛换一下顺序就好了. #include <iostream> #include <cstdio> #include <cstring> //#define OPEN_FILE using namespace st…
POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepted: 11359 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the ve…
队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调队列和单调栈. 先来看一个问题,给一个长度为N的数列,a1,a2...aN,然后给一个k<=N,求输出b1,b2...bN这N个数,其中 bi=max( aj | j<=i && j>i-k && j>0 ). 比较朴素的想法是用一个Nk复杂度的循环来求…
什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素和v比较,如果队尾的元素不大于v,删掉,直到队尾元素大于v,再将v插入队尾 2.删除元素,队尾的删除如上所述,队首的删除是一直到队首的元素不存在集合时,再将其删除 模板题poj2823 #include<iostream> #include<cstring> #include<c…