poj2823 题目链接

长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值

如果用单调队列做,求最小值时,队列应该严格递增的。所以插入时,队尾大于等于插入值的元素都应被舍弃,因为插入元素不仅小而且新,没有必要保留队尾这些又大又旧的元素。

  1. /*
    选C++交是5k多毫秒,但是G++就会超时。
    */
    #include <cstdio>
  2. #include <cstring>
  3. const int N = ;
  4. int data[N];
  5. int o1[N],o2[N];
  6. int q[N];
  7. int n,k;
  8. void getMin(){
  9. int head,tail;
  10. head = tail = ;
  11. for(int i=;i<n;i++){
  12. while((tail>head)&&data[q[tail-]]>data[i]) tail--;
  13. q[tail++] = i;
  14. if(i>=(k-)){
  15. while((head<tail)&&q[head]<(i-k+)) head++;
  16. o1[i-k+] = data[q[head]];
  17. }
  18. }
  19. }
  20. void getMax(){
  21. int head,tail;
  22. head = tail = ;
  23. for(int i=;i<n;i++){
  24. while((head<tail)&&(data[q[tail-]]<data[i])) tail--;
  25. q[tail++] = i;
  26. if(i>=(k-)){
  27. while((head<tail)&&(q[head]<(i-k+))) head++;
  28. o2[i-k+] = data[q[head]];
  29. }
  30. }
  31. }
  32. int main(){
  33. scanf("%d%d",&n,&k);
  34. for(int i=;i<n;i++) scanf("%d",data+i);
  35. getMin();
  36. getMax();
  37. for(int i=;i<n-k+;i++) printf("%d ",o1[i]); puts("");
  38. for(int i=;i<n-k+;i++) printf("%d ",o2[i]); puts("");
  39. return ;
  40. }

hdu3415 题目链接

长度为N的数组,长度小于等于K的非空子串的最大和。

求完前缀和后就转化成了窗宽为k的单调队列

  1. #include <cstdio>
  2. #include <cstring>
  3. const int N = ;
  4. const int INF = 0x0FFFFFFF;
  5. int data[N],sum[N*];
  6. int q[N*];
  7. int n,k,total;
  8. int minq(int &spos,int &epos){
  9. int head,tail;
  10. head = tail = ;
  11. int ans = -INF;
  12. for(int i=;i<total;i++){
  13. while((head<tail)&&(sum[q[tail-]]>=sum[i-])) tail--;
  14. while((head<tail)&&q[head]<i-k) head++;
  15. q[tail++] = i-;
  16. if((sum[i]-sum[q[head]]>ans)){
  17. spos = q[head];
  18. epos = i;
  19. ans = sum[epos]-sum[spos];
  20. }
  21. }
  22. return ans;
  23. }
  24. int main(){
  25. int t;
  26. for(scanf("%d",&t);t--;){
  27. scanf("%d%d",&n,&k);
  28. sum[] = ;
  29. for(int i=;i<=n;i++){
  30. scanf("%d",data+i);
  31. sum[i]=sum[i-]+data[i];
  32. }
  33. for(int i=;i<k;i++) sum[n+i]=sum[n+i-]+data[i];
  34.  
  35. total = n+k;
  36. int spos,epos;
  37. int ans = minq(spos,epos);
  38. spos++;
  39. if(epos>n) epos-=n;
  40. if(spos>n) spos-=n;
  41. printf("%d %d %d\n",ans,spos,epos);
  42. }
  43. return ;
  44. }

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

  1. POJ2823 Sliding Window(单调队列)

    单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...

  2. hdu3415(单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415 题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个.从中选一个不超过k的序列,使得序列 ...

  3. poj2823一道纯单调队列

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 32099   Accepted: 9526 ...

  4. HDU3415【单调队列】

    单调队列解决通过维护满足条件内的值,并保证队列里的值单调,解决一个最大最小. 让你求一个k区间长度的最大值,那么就只要搞下前缀和, sum[ i , j ] 区间的和:sum[ j ]-sum[ i ...

  5. poj2823:单调队列入门题

    今天学习了一下单调队列这种数据结构,思想不是很难 参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html 然后自 ...

  6. POJ2823 单调队列

    POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...

  7. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  8. 数据结构录 之 单调队列&单调栈。

    队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调 ...

  9. poj2823 单调队列初步

    什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素 ...

随机推荐

  1. WebRTC代码走读(八):代码文件夹结构

    转载注明出处http://blog.csdn.net/wanghorse ├── ./base //基础平台库,包含线程.锁.socket等 ├── ./build //编译脚本.gyp ├── ./ ...

  2. Find Blank Cell in Excel

    Click Home > Find & Select > Go To Special. In the Go To Special dialog box, check the Bla ...

  3. JavaScript学习记录一

    title: JavaScript学习记录一 toc: true date: 2018-09-11 18:26:52 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  4. Linux部署之批量自动安装系统之测试篇

    1.         客户端从网络启动如下   2.         复制vesamenu.c32文件可解决上面的问题   3.         客户端再次启动   4.         选择第一个进 ...

  5. map循环遍历

    data.map(function(item){ item.show = false; //将拿到的data循环给每一项添加show属性 });

  6. 【BZOJ4071】【APIO2015】巴邻旁之桥

    题意: Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1 ...

  7. UVA-10003 Cutting Sticks 动态规划 找分界点k的动规

    题目链接:https://cn.vjudge.net/problem/UVA-10003 题意 有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度. 问有什么样的 ...

  8. HDU-5685 Problem A 求乘法逆元

    题目链接:https://cn.vjudge.net/problem/HDU-5685 题意 给一个字符串S和一个哈希算法 $ H(s)=\prod_{i=1}^{i\leq len(s)}(S_{i ...

  9. 第一个JavaWeb工程

    这个工程主要用来研究log4j,所以就只有一个页面,希望以后慢慢进步. java动态生成网页主要使用servlet.把请求拦截下来,处理后返回结果. 这里创建的是一个maven工程. 结构如下:

  10. 解决jquery动态增加元素后children值没有变的问题

    html代码如下: <ul id="attr_input_panel"> <li> <div class="attr_input_item& ...