每日一题 day26 打卡

Analysis

单调队列模板

对于每一个区间,有以下操作:

1、维护队首(就是如果你已经是当前的m个之前那你就可以被删了,head++)

2、在队尾插入(每插入一个就要从队尾开始往前去除冗杂状态)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. #define maxn 1000000+10
  7. using namespace std;
  8. inline int read()
  9. {
  10. int x=;
  11. bool f=;
  12. char c=getchar();
  13. for(; !isdigit(c); c=getchar()) if(c=='-') f=;
  14. for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
  15. if(f) return x;
  16. return -x;
  17. }
  18. inline void write(int x)
  19. {
  20. if(x<){putchar('-');x=-x;}
  21. if(x>)write(x/);
  22. putchar(x%+'');
  23. }
  24. int n,k;
  25. int a[maxn];
  26. int deque[maxn],deque_num[maxn];
  27. inline void solve_min()
  28. {
  29. int head=,tail=;
  30. for(int i=;i<=n;i++)
  31. {
  32. while(head<=tail&&deque[tail]>=a[i]) tail--;
  33. deque[++tail]=a[i];
  34. deque_num[tail]=i;
  35. while(head<=tail&&deque_num[head]<=i-k) head++;
  36. if(i>=k)
  37. {
  38. write(deque[head]);
  39. printf(" ");
  40. }
  41. }
  42. printf("\n");
  43. }
  44. inline void solve_max()
  45. {
  46. int head=,tail=;
  47. for(int i=;i<=n;i++)
  48. {
  49. while(head<=tail&&deque[tail]<=a[i]) tail--;
  50. deque[++tail]=a[i];
  51. deque_num[tail]=i;
  52. while(head<=tail&&deque_num[head]<=i-k) head++;
  53. if(i>=k)
  54. {
  55. write(deque[head]);
  56. printf(" ");
  57. }
  58. }
  59. }
  60. signed main()
  61. {
  62. n=read();k=read();
  63. for(int i=;i<=n;i++) a[i]=read();
  64. solve_min();
  65. memset(deque,,sizeof(deque));
  66. memset(deque_num,,sizeof(deque_num));
  67. solve_max();
  68. return ;
  69. }
  70. /*
  71. 10 3
  72. -94 21 24 73 38 77 11 73 9 -88
  73.  
  74. -94 21 24 38 11 11 9 -88
  75. 24 73 73 77 77 77 73 73
  76. */

请各位大佬斧正(反正我不认识斧正是什么意思)

洛谷 P1886 滑动窗口 题解的更多相关文章

  1. 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)

    To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...

  2. [POJ2823][洛谷P1886]滑动窗口 Sliding Window

    题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...

  3. 洛谷 P1886 滑动窗口(单调队列)

    题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...

  4. 洛谷P1886滑动窗口

    题目传送门 理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值. 没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量 ...

  5. 洛谷 P1886 滑动窗口

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  6. [洛谷P1886]滑动窗口 (单调队列)(线段树)

    ---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...

  7. 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  8. 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window

    https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...

  9. 洛谷 P1886 滑动窗口(单调队列)

    嗯... 题目链接:https://www.luogu.org/problem/P1886 首先这道题很典型,是标准的单调队列的模板题(也有人说单调队列只能解决这一个问题).这道题可以手写一个队列,也 ...

随机推荐

  1. python学习-66 面向对象3 - 多态

    多态 1.什么是多态 由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同. 举例: class H2O: def __init__(self,type,tem): self.type = ty ...

  2. 2019-10-11 ubuntu ssh远程免密登录配置及配置别名

    在客户端能正常远程访问服务端的前提下. 客户端: 1)配置免密 执行 ssh-keygen 即可生成 SSH 钥匙,回车三次. 执行 ssh-copy-id user@remote,可以让远程服务器记 ...

  3. MySQL运维中的Tips--持续更新

    1.into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件.配置文件加secure_file_priv=''select concat('insert ...

  4. IdentityServer4使用OpenIdConnect实现单点登录

    接上一篇:IdentityServer4实现OAuth2.0四种模式之授权码模式 前面写的四种OAuth2.0实现模式只涉及到IdentityServer4的OAuth2.0特性,并没有涉及到OenI ...

  5. 博客使用 utterances 作为评论系统

    utterances 是一款基于 GitHub issues 的评论工具. 相比同类的工具 gitment.gitalk 以及 disqus 评论工具,优点如下: 极其轻量 加载非常快 配置比较简单 ...

  6. day33-python之多线程

    1.多线程实例 # import threading # import time # # import threading import time class MyThread(threading.T ...

  7. FreeRTOS中断测试

    configMAX_SYSCALL_INTERRUPT_PRIORITY 高于此优先级的中断,不能被禁止 #ifdef __NVIC_PRIO_BITS #define configPRIO_BITS ...

  8. live555的使用(转载)

    Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现 了对多种音视频编码格式的音视频数据的流 ...

  9. with读、写文件

    1.with写文件 save_file = "1.txt" str_data = "123a\nbc" with open(save_file, 'a', en ...

  10. Android笔记(六十七) 自定义控件

    实际编程中,系统提供的控件往往无法满足我们的需求,一来是样子丑陋,二来是一些复杂的组合需要多次使用的话,每次都写一堆控件的组合会很耗费时间,所以我们将这些组件的组合自定义为一个新的控件,以后使用的时候 ...