#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. 课后题--------求分子量-----Molar mass------

    简单的化学式  求分子量问题 下面附上  代码和解析. #include<stdio.h> #include<algorithm> #include<string.h&g ...

  2. jQuery——表单应用(3)

    HTML: <!--表单-多行文本框应用-滚动条高度变化--> <!DOCTYPE html> <html> <head> <meta chars ...

  3. 【js】callback时代的变更

    最近团队开始越来越多的使用es7标准的async/await,从最开始的promise到后面的generator,再到现在async,对于异步,每个时期都有着其特有的解决方案,今天笔者就以自己的接触为 ...

  4. CircuitBreaker design pattern---reference

    It's common for software systems to make remote calls to software running in different processes, pr ...

  5. MySQL客户端导入数据库脚本,字段值出现乱码解决方法

    解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-character-set=utf8,保存,然后重启 ...

  6. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  7. C# 字符串每隔两个 提取

    private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); str ...

  8. day19-常用模块IV(re、typing)

    目录 re模块 typing模块 爬取音频 re模块 用来从字符串(文本)中查找特定的东西 1.元字符:有特殊意义的字符 ^ 从开头匹配 import re a = re.findall('^abc' ...

  9. arx移植 及预处理器

    来源:http://bbs.mjtd.com/thread-102486-1-1.html 另,ObjectARX编程参考:http://bbs.mjtd.com/forum-14-1.html 如果 ...

  10. 梦想CAD控件关于标注的系统变量说明

    主要用到函数说明: IMxDrawDimension::SetDimVarDouble 设置标注属性的实数类型变量值,详细说明如下: 参数 说明 [in] LONG iType 该属性的类形值 dVa ...