#include<stdio.h>//每次要吧生命值长的加入,吧生命用光的舍弃

#define N  1100000

int getmin[N],getmax[N],num[N],n,k,a[N];

int main(){

int i,first,last;

while(scanf("%d%d",&n,&k)!=EOF) {

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

first=1;last=1;

getmin[first]=a[1];

num[first]=1;

for(i=2;i<=k;i++) {

while(a[i]<=getmin[last]&&first<=last)

last--;

getmin[++last]=a[i];

num[last]=i;

}

printf("%d",getmin[first]);

for(i=k+1;i<=n;i++) {

while(a[i]<=getmin[last]&&first<=last)//碰到相等也要改变因为他生命长

last--;

getmin[++last]=a[i];

num[last]=i;

while(num[first]<i-k+1&&first<=last)//如果没有在要求的范围内就舍弃

first++;

printf(" %d",getmin[first]);

}

printf("\n");

first=1;last=1;

getmax[first]=a[1];

num[first]=1;

for(i=2;i<=k;i++) {

while(a[i]>=getmax[last]&&first<=last)

last--;

getmax[++last]=a[i];

num[last]=i;

}

printf("%d",getmax[first]);

for(i=k+1;i<=n;i++) {

while(a[i]>=getmax[last]&&first<=last)

last--;

getmax[++last]=a[i];

num[last]=i;

while(num[first]<i-k+1&&first<=last)

first++;

printf(" %d",getmax[first]);

}

printf("\n");

}

return 0;

}

//二分法

#include<stdio.h>

struct node {

int index,f;

}pmax[1100000],pmin[1100000];

int a[1100000];

int qiulinjie(int front ,int last,int d) {

int mid;

while(front<=last) {

mid=(front+last)/2;

if(pmin[mid].f==d)

return mid;

else

if(pmin[mid].f>d)

last=mid-1;

else

front=mid+1;

}

return front;

}

int qiulinjie1(int front ,int last,int d) {

int mid;

while(front<=last) {

mid=(front+last)/2;

if(pmax[mid].f==d)

return mid;

else

if(pmax[mid].f<d)

last=mid-1;

else

front=mid+1;

}

return front;

}

int main() {

int front,last,i,j,k,n,m;

while(scanf("%d%d",&n,&k)!=EOF) {

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

front=last=1;

pmin[front].index=1;

 pmin[last].f=a[1];

 for(i=2;i<=k;i++) {

 last=qiulinjie(front,last,a[i]);

 pmin[last].index=i;

 pmin[last].f=a[i];

 }

 printf("%d",pmin[front].f);

 for(;i<=n;i++) {

 last=qiulinjie(front,last,a[i]);

 pmin[last].index=i;

 pmin[last].f=a[i];

 while(i-pmin[front].index>=k)

 front++;

 printf(" %d",pmin[front].f);

 }

printf("\n");









front=last=1;

pmax[front].index=1;

 pmax[front].f=a[1];

 for(i=2;i<=k;i++) {

 last=qiulinjie1(front,last,a[i]);

 pmax[last].index=i;

 pmax[last].f=a[i];

 }

 printf("%d",pmax[front].f);

 for(;i<=n;i++) {

 last=qiulinjie1(front,last,a[i]);

 pmax[last].index=i;

 pmax[last].f=a[i];

 while(i-pmax[front].index>=k)

 front++;

 printf(" %d",pmax[front].f);

 }

 printf("\n");

}

 return 0;

}

poj 2823单调队列模板题的更多相关文章

  1. Sliding Window POJ - 2823 单调队列模板题

    Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...

  2. caioj 1172 poj 2823 单调队列过渡题

    给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数. 输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n).下来给出n个整数. 输出:一行一个整数 ...

  3. POJ 2823 Sliding Window​ (模板题)【单调队列】

    <题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...

  4. luoguP1886 滑动窗口(单调队列模板题)

    题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...

  5. POJ 2823 单调队列入门水题

    最最基础的单调队列题目.一个单增一个单减.还是可以借此好好理解一下单调队列的. #include <stdio.h> #include <string.h> #include ...

  6. poj 2823 单调队列

    思路:裸的单调队列. #include<iostream> #include<cstring> #include<cstdio> #include<algor ...

  7. hdu3415 单调队列模板题

    比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring&g ...

  8. POJ 2823 滑动窗口 单调队列模板

    我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求: f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0 ...

  9. POJ 2823 Sliding Window(单调队列入门题)

      Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 190 ...

随机推荐

  1. Linux学习系列八:操作网口

    一些相对高性能的单片机会带以太网接口,网口在MCU里算是比较复杂的外设了,因为它涉及到网络协议栈,通常情况下网络协议栈会运行在一个RTOS中,所以对普通单片机开发者来说网口使用起来相对难度较大一些.在 ...

  2. [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  3. [转]ASP.NET MVC的帮助类HtmlHelper和UrlHelper

    本文转自:http://www.cnblogs.com/greatandforever/archive/2010/04/20/1715914.html?login=1 在ASP.NET MVC框架中没 ...

  4. while和for的内嵌

    迭代,从初始情况按照规律不断求解中间情况,最终推导出结果.(折纸珠峰) 穷举:把所有情况都列举一遍,选择符合条件的选项(百鸡百钱) 循环四要素:初始条件,循环条件,循环体,状态改变. While的使用 ...

  5. Git学习笔记(2)-初探Git

    1.创建版本库 (1)设置Git的配置变量.这些设置会在全局文件(.gitconfig)或系统文件(/etc/gitconfig)中做永久记录 $ git config --global user.n ...

  6. LN : leetcode 207 Course Schedule

    lc 207 Course Schedule 207 Course Schedule There are a total of n courses you have to take, labeled ...

  7. Scala-基础-运算符

    import junit.framework.TestCase /** * 运算符 */ class Demo3 extends TestCase { def test_+ { var x = 10; ...

  8. hanframe开微博了

    之前一直在百度里转一些文章,平时都把积累的东西放在一些文档中,还是想着记下来会比较好一点,顺便,每天都来这里做一点总结吧

  9. Elasticsearch--建议器

    目录 可用的建议器类型 term建议器 term建议器的配置选项 phrase建议器 completion建议器 在考虑性能的情况下,允许用户的拼写错误,以及构建一个自动完成功能 可用的建议器类型 t ...

  10. 提取header头进行模块化处理

    在进行爬取网上东西的时候一般网站都做了UA的过滤,解决办法就是在代码中加入. 所以才有了本篇提取header头信息单独写成一个模块或者说是函数/类的想法,直接上示例 1.把UA头信息在浏览器中复制出来 ...