题目链接:http://poj.org/problem?id=2823

用RMQ超时了,我想应该是不会的,看discuss说,之前RMQ过了。

维护两个单调队列。

单调递减的队列,每插入一个时:

超过单调队列长度,左移头指针。

第一个或者符合条件,直接加到后面。

否则,一直退;

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7.  
  8. const int N = + ;
  9.  
  10. int n,m;
  11. int a[N],q[N];
  12.  
  13. void MinQ()
  14. {
  15. int h=,t=;
  16. q[] = ;
  17. for(int i=;i<=n;i++) {
  18. if(i-q[h]==m) h++;
  19.  
  20. if(t==h-||a[i]>a[q[t]]) {
  21. t++;
  22. q[t] = i;
  23. }
  24. else {
  25. while(t>=h&&a[i]<=a[q[t]])
  26. {
  27. q[t] = i;
  28. t--;
  29. }
  30. t++;
  31. }
  32. if(i>=m) printf("%d ",a[q[h]]);
  33.  
  34. }
  35. puts("");
  36. }
  37.  
  38. void MaxQ()
  39. {
  40. int h=,t=;
  41. q[] = ;
  42. for(int i=;i<=n;i++) {
  43.  
  44. if(i-q[h]==m) h++;
  45.  
  46. if(t==h-||a[i]<a[q[t]]) {
  47. t++;
  48. q[t] = i;
  49. }
  50. else {
  51. while(t>=h&&a[i]>=a[q[t]])
  52. {
  53. q[t] = i;
  54. t--;
  55. }
  56. t++;
  57.  
  58. }
  59. if(i>=m) printf("%d ",a[q[h]]);
  60.  
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. cin>>n>>m;
  67. for(int i=;i<=n;i++) {
  68. scanf("%d",&a[i]);
  69. }
  70.  
  71. MinQ();
  72. MaxQ();
  73.  
  74. return ;
  75. }

题目链接:http://acm.fzu.edu.cn/problem.php?pid=1894

和单调递增队列一样。

  1. /*
  2. RunID: 727738
  3. UserID: TreeDream
  4. Submit time: 2017-02-16 00:04:08
  5. Language: C++
  6. Length: 1167 Bytes.
  7. Result: Accepted
  8. */
  9.  
  10. //#include <bits/stdc++.h>
  11. #include <iostream>
  12. #include <cstdio>
  13. #include <algorithm>
  14. #include <cstring>
  15.  
  16. using namespace std;
  17.  
  18. const int maxn = + ;
  19. int a[maxn];
  20. int q[maxn];
  21.  
  22. int main()
  23. {
  24. //freopen("in.txt","r",stdin);
  25. int t;
  26. scanf("%d",&t);
  27.  
  28. while(t--)
  29. {
  30. char op[];
  31. scanf("%s",op);
  32.  
  33. int head = ,tail = ;
  34.  
  35. q[] = -;
  36.  
  37. int i=,j=;
  38. char cmd[],name[];
  39. int len = ;
  40.  
  41. while(scanf("%s",cmd))
  42. {
  43. if(strcmp(cmd,"END")==) break;
  44.  
  45. if(cmd[]=='C') //插入是有条件的
  46. {
  47. scanf("%s",name);
  48. len ++;
  49. scanf("%d",&a[len]);
  50. while(head<=tail&&a[q[tail]]<=a[len])
  51. tail--;
  52. q[++tail] = len;
  53. }
  54.  
  55. else if(cmd[]=='G')
  56. {
  57. while(head<=tail&&q[head]<=j)
  58. head++;
  59. j++;
  60. }
  61. else printf("%d\n",head>tail?-:a[q[head]]);
  62. }
  63. }
  64.  
  65. return ;
  66. }

参考:http://blog.csdn.net/acdreamers/article/details/20911981

单调队列 poj2823,fzu1894的更多相关文章

  1. POJ2823 Sliding Window (单调队列)

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

  2. poj2823:单调队列入门题

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

  3. poj2823 单调队列初步

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

  4. 刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)

    最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823   滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算 ...

  5. poj2823/hdu3415 - 数据结构 单调队列

    poj2823 题目链接 长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值 如果用单调队列做,求最小值时,队列应该严格递增的.所以插入时,队尾大于等于插入值的元素都应被舍弃,因为 ...

  6. POJ2823 单调队列

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

  7. FZU1894 单调队列

    S - 1019 Time Limit:1500MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  8. POJ2823 Sliding Window(单调队列)

    题目要输出一个序列各个长度k的连续子序列的最大值最小值. 多次RMQ的算法也是能过的,不过单调队列O(n). 这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元 ...

  9. 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41844   Accepted: 12384 ...

随机推荐

  1. 分布式事务框架-fescar

    https://github.com/alibaba/fescar/wiki/%E6%A6%82%E8%A7%88?spm=5176.11156381.0.0.b9f85ceegUXvCC

  2. 用HTMLParser解析html时报错:No module named 'htmlentitydefs'

    python3.6用HTMLParser解析html时报错 No module named 'htmlentitydefs'或No module named 'markupbase' 先上代码 fro ...

  3. .NET Core单元测试覆盖率统计coverlet配置和使用

    https://segmentfault.com/a/1190000017569492 需要使用: 使用 Moq 测试.NET Core 应用    https://www.cnblogs.com/c ...

  4. sf01_什么是数据结构

    数据结构解决什么问题 如何在计算机中存储数据和信息,采用什么样的方法和技巧加工处理这些数据,都是数据结构需要努力解决的问题. 解决问题的步骤 使用计算机解决问题的步骤:分析具体问题得到数学模型,设计解 ...

  5. Dev Express Report 学习总结(二)关于如何使用Grouping分组

    对于所有的报表工具来说,基本上所有Grouping功能的都很相似.正如前面说到的,Group处于Page Header和Page Footer之间,同时又将Detail包括与其中. 下面还是通过一个例 ...

  6. 解决“<form>提交,CSRF验证失败。请求中止”

    在相应的提交页面,内,添加"{%csrf_token%} ",如: Django工程的app文件的views.py添加屏蔽装饰器,(相应的函数上): from django.vie ...

  7. VS Ctrl + Shift + Q

    在VS中按 Ctrl + Shift + Q 可以快速查找 void OnCollisionStay  等方法. void OnCollisionStay(Collision collision) { ...

  8. 性能测试工具LoadRunner27-LR之读取Excel数据

    为何要读取Excel数据? 很多用户喜欢用Excel来统计数据,比如学生成绩表.个人信息等.有时需要把Excel中的数据来进行参数化,数据量比较多时,一个个在LR里输入是不现实的,因此需要用LR来导入 ...

  9. [转]用JS获取地址栏参数的方法(超级简单)

    本文转自:http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用 ...

  10. (转) tcpdump参数解析及使用详解

    tcpdump介绍 原文:http://blog.csdn.net/hzhsan/article/details/43445787 tcpdump 是一个运行在命令行下的抓包工具.它允许用户拦截和显示 ...