http://poj.org/problem?id=2823

题意:你有一个长度n的序列,分别询问[1,k],[2,k+1],[3,k+2],...,[n-k+1,n]这n-k+1个区间的最大值和最小值。

单调队列入门题。用两个单调队列分别维护当前最大值和最小值的最优解、次优解、……K优解。

每次拓展一个数就不断将队尾的劣解出队,保持队列的单调性。然后不断将队首的过气解(即距离当前位置大于等于k)出队。之后队列的队首就是最优解了。

  1. #include <iostream>
  2. #include <deque>
  3. #define maxn 1000005
  4. using namespace std;
  5. int n, k, a[maxn];
  6. deque<int> mx, mn; // 分别存最大值的最优解和最小值的最优解
  7. int mxans[maxn], mnans[maxn];
  8. int main()
  9. {
  10. ios::sync_with_stdio(false);
  11. cin >> n >> k;
  12. for (int i = ; i <= n; i++)
  13. cin >> a[i];
  14. for (int i = ; i < k; i++) // 先处理前k-1个数
  15. {
  16. // 将队尾的劣解出队
  17. while (!mn.empty() && a[mn.back()] > a[i])
  18. mn.pop_back();
  19. mn.push_back(i);
  20. while (!mx.empty() && a[mx.back()] < a[i])
  21. mx.pop_back();
  22. mx.push_back(i); // 插入当前解
  23. }
  24. for (int i = k; i <= n; i++)
  25. {
  26. // 将队尾的劣解出队
  27. while (!mn.empty() && a[mn.back()] > a[i])
  28. mn.pop_back();
  29. mn.push_back(i);
  30. while (!mx.empty() && a[mx.back()] < a[i])
  31. mx.pop_back();
  32. mx.push_back(i);
  33.  
  34. // 将队首的过气解出队
  35. while (!mx.empty() && i - mx.front() >= k)
  36. mx.pop_front();
  37. while (!mn.empty() && i - mn.front() >= k)
  38. mn.pop_front();
  39.  
  40. mxans[i] = mx.front();
  41. mnans[i] = mn.front();
  42. }
  43. for (int i = k; i <= n; i++)
  44. cout << a[mnans[i]] << ' ';
  45. cout << endl;
  46. for (int i = k; i <= n; i++)
  47. cout << a[mxans[i]] << ' ';
  48. cout << endl;
  49. return ;
  50. }

【POJ2823】Sliding Window的更多相关文章

  1. 【poj2823】 Sliding Window

    http://poj.org/problem?id=2823 (题目链接) 题意 维护滑动窗口最大最小值. Solution sb单调队列 代码 // poj2823 #include<algo ...

  2. 【原创】Sliding Window Maximum 解法分析

    这道题是lintcode上的一道题,当然leetcode上同样有. 本题需要寻找O(N)复杂度的算法. 解体思路比较有特点,所以容易想到参考 最小栈 的解题办法. 但是最小栈用栈维护最小值很直观,这道 ...

  3. 【LeetCode 239】Sliding Window Maximum

    Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...

  4. 【POJ 2823】【Luogu P1886】Sliding Window 滑动窗口

    POJ 2823 Luogu P1886 [解题思路] 这是一个单调队列算法的经典题目,几乎学习单调队列的人都接触过这题. 利用单调队列算法求出每一个固定区间内的最(大/小)值. 以下以最大值为例: ...

  5. 【POJ 2823 Sliding Window】 单调队列

    题目大意:给n个数,一个长度为k(k<n)的闭区间从0滑动到n,求滑动中区间的最大值序列和最小值序列. 最大值和最小值是类似的,在此以最大值为例分析. 数据结构要求:能保存最多k个元素,快速取得 ...

  6. 【POJ 2823】Sliding Window(单调队列/堆)

    BUPT2017 wintertraining(16) #5 D POJ - 2823 题意 给定n,k,求滑窗[i,i+k-1]在(1<=i<=n)的最大值最小值. 题解 单调队列或堆. ...

  7. 【翻译】Flink window

    本文翻译自flink官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/stream/operators/window ...

  8. 【leetcode】Minimum Window Substring (hard) ★

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  9. 【转载】利用window.performance.timing进行性能分析

    利用window.performance.timing进行性能分析   性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...

随机推荐

  1. 【前端GUI】——网站设计的重要知识点总结&思维导图(一)

    前言:网页美术设计具有四大特点,分别为交互性.整合性.多维性以及动态性.完整的网页设计既需要试听元素,也需要版式设计,以求有效的传达信息.在设计的时候,设计者要学会利用框架,也要学会打破框架. 一.优 ...

  2. Coursera上视频无法播放将怎么解决?

    相信很多朋友在播放Coursera中的视频都会遇到一个问题,视频全黑,点击播放,进度条转了一圈又消失不见. 这时候我们该找找是什么问题啦? 解决方法一: 如果你是FQ看的网课视频,那么你把VPN从au ...

  3. spring mvc常用注解的说明

    最近一段时间学习了springboot,所以熟悉一下mvc中常用的注解,这样可以方便开发 简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类 ...

  4. poj 1254 Hansel and Grethel

    Hansel and Grethel Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2199   Accepted: 100 ...

  5. Problem E

    题意:看电视,计算出最多看多少个电视,已给出电视起始终止时间: 解体思路:思路这个题拿到手没多想,上课的例题,就照葫芦画瓢写了一个: 感悟:虽然刚开始学贪心,第一遍代码就AC了有点小小的成就感: 代码 ...

  6. Einbahnstrasse

    Einbahnstrasse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. Node.js Buffer

    Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer ...

  8. DOM遍历-祖先

    遍历 - 祖先 向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() parents() parentsUntil() jQuery parent() ...

  9. 移动端车牌识别sdk开发包(可下载)

    移动端车牌识别是一项基于OCR识别的应用技术.移动端车牌识别过程主要包含五个步骤,其中包括图像采集.图像预处理.车牌定位.字符分割.字符识别.输出结果等一系列计算机算法运算, 第一步[图像采集]:此步 ...

  10. ⒃bootstrap组件 轮播图 基础案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...