#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. hadoop2.x 常用端口及定义方法

    一 常用端口号 1 HDFS 2 YARN 3 HBase 4 Hive 5 ZooKeeper 二 Web UIHTTP服务 1 对于存在 Web UIHTTP服务的所有 hadoop daemon ...

  2. [POI2013]POL-Polarization

    题目描述 Everyone knew it would only be a matter of time. So what? Faced for years on, a peril becomes t ...

  3. rman 问题

    1. RMAN Repeatedly Fail To Backup Archivelogs with RMAN-20242 Cause: There is a mis-match between th ...

  4. mybatis之多个对象自动装配问题

    因为业务的需要,所以我在一个方法中植入三个对象,但是mybatis并没有自动装配,结果并不是我想的那么美好,还是报错了.报错截图如下: <select id="GetOneBillPa ...

  5. nginx connect failed (110- Connection timed out) 问题排查

    首先排查 ping 下 nginx 与代理服务是否ping 的通,带端口的,telnet 下端口号是否是通的,本次遇到问题为 telnet 发现有台服务器不通,原因是端口未开放

  6. MSSQLServer知识点总结:DDL(create,alter,drop,declare)-未完整

    一.开发环境 Window10 二.开发工具 SQLServer2012 三.数据库的操作 1.创建 (1)方式一:使用默认的配置信息 create database T_mydb2 (2)方式二:自 ...

  7. 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)

    //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...

  8. CF848A From Y to Y

    思路1: 每次贪心地选择满足i * (i - 1) / 2 <= k最大的i并从k中减去i * (i - 1) / 2,直至k为0.由于函数x * (x - 1) / 2的增长速度比2x要慢,所 ...

  9. 生成100个Div

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  10. json-server模拟REST API

    介绍 可以开启一个服务前端使用 安装 npm i json-server -g 使用 $ json-server db.json -p 3000 // 在文件目录下执行上述命令,开放一个端口3000的 ...