题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数。

解题思路:这道题是一道区间查询问题,可以用线段树做。每个节点保存最大值和最小值即可。

注意点:①当s=1时可直接输出,否则会很慢;②查询操作不要返回值,我当时直接返回了struct,导致洛谷上TLE;③POJ上用C++提交,G++会TLE。

C++ Code:

  1. #include<cstdio>
  2. #include<cctype>
  3. #define max(a,b) (((a)>(b))?(a):(b))
  4. #define min(a,b) (((a)<(b))?(a):(b))
  5. struct node{
  6. int Max,Min;
  7. node(int a=-1000000000,int b=1000000000):Max(a),Min(b){}
  8. }d[4000401],ans[1000041];
  9. int n,s,ansMax,ansMin;
  10. inline int readint(){
  11. char c=getchar();
  12. bool b=false;
  13. while(!isdigit(c))b=c=='-',c=getchar();
  14. int p=0;
  15. while(isdigit(c))p=(p<<3)+(p<<1)+(c^'0'),c=getchar();
  16. return (b)?(-p):p;
  17. }
  18. void bt(int l,int r,int o){
  19. if(l==r){
  20. d[o].Max=d[o].Min=readint();
  21. return;
  22. }
  23. int mid=l+r>>1;
  24. bt(l,mid,o<<1);
  25. bt(mid+1,r,o<<1|1);
  26. d[o].Max=max(d[o<<1].Max,d[o<<1|1].Max);
  27. d[o].Min=min(d[o<<1].Min,d[o<<1|1].Min);
  28. }
  29. void query(int l,int r,int o,int L,int R){
  30. if(L<=l&&r<=R){
  31. ansMax=max(ansMax,d[o].Max);
  32. ansMin=min(ansMin,d[o].Min);
  33. return;
  34. }
  35. int mid=l+r>>1;
  36. if(L<=mid)query(l,mid,o<<1,L,R);
  37. if(mid<R)query(mid+1,r,o<<1|1,L,R);
  38. }
  39. int main(){
  40. n=readint(),s=readint();
  41. if(s==1){
  42. for(int i=1;i<n;++i){
  43. ans[i].Max=readint();
  44. printf("%d ",ans[i].Max);
  45. }
  46. printf("%d\n",ans[n].Max=readint());
  47. for(int i=1;i<n;++i)printf("%d ",ans[i].Max);
  48. printf("%d\n",ans[n].Max);
  49. return 0;
  50. }
  51. bt(1,n,1);
  52. for(int i=s;i<=n;++i){
  53. ansMax=-1000000000,ansMin=1000000000;
  54. query(1,n,1,i-s+1,i);
  55. ans[i].Max=ansMax;
  56. ans[i].Min=ansMin;
  57. }
  58. for(int i=s;i<n;++i)printf("%d ",ans[i].Min);
  59. printf("%d\n",ans[n].Min);
  60. for(int i=s;i<n;++i)printf("%d ",ans[i].Max);
  61. printf("%d\n",ans[n].Max);
  62. return 0;
  63. }

[POJ2823][洛谷P1886]滑动窗口 Sliding Window的更多相关文章

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

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

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

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

  3. 洛谷P1886滑动窗口

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

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

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

  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 滑动窗口(单调队列)

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

  9. 洛谷 P1886 滑动窗口 /【模板】单调队列

    纯板子题,入队时保证单调性,即单调栈,出队保证题目条件,本题即窗口长度k,在入队出队时都可以维护信息 ; int buf[maxm], maxq[maxm], minq[maxm], ans1[max ...

随机推荐

  1. event 下鼠标坐标的获取

    event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...

  2. spring mvc 下载的时候中文文件名不显示

    Headers.add("Content-Disposition", "attachment;filename=" + new String(file.getB ...

  3. (转载)spring 之间的远程调用-Spring Http调用的实现

    原文:https://www.cnblogs.com/lewisat/p/6132082.html 1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计 ...

  4. [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵

    本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单

  5. linux gnome kde点滴

    2014.12.08 下面切换的方法对于fedora 17没有效果,对于fedora 17, 要使用system-switch-displaymanager,出现 点击相应的选项,然后就进入相应的启动 ...

  6. HDU 1796

    呃,我竟然傻了,同时被a且b整除的个数为n/(a*b). 其实应该是n/[a,b]才对,是他们的最小公倍数啊... #include <iostream> #include <cst ...

  7. [Angular] Read Custom HTTP Headers Sent by the Server in Angular

    By default the response body doesn’t contain all the data that might be needed in your app. Your ser ...

  8. android的架构图

    1.Applications 该层是Android应用程序层. 每一个应用必须利用android系统设计的应用框架(application framework)开发. 眼下的开发环境是eclipse ...

  9. How to start/stop DB instance of Oracle under Linux

    All below actions should be executed with "oracle" user account 1. Check the status of lis ...

  10. POJ 2318 叉积判断点与直线位置

    TOYS   Description Calculate the number of toys that land in each bin of a partitioned toy box. Mom ...