#include<stdio.h>

#include<string.h>

#define N  1100000

int a[N];

int fmin[N],fmax[N];

int tmin[N],tmax[N];

int dicmax(int l,int r,int f[],int k) {

    int mid;

     while(l<=r) {

        mid=(l+r)/2;

        if(k>=f[mid])//

            r=mid-1;

        else

            l=mid+1;

     }

     return l;//这里的r返回第一个大于k的数的位置-1

}

int dicmin(int l,int r,int f[],int k) {

  int mid;

  while(l<=r) {

    mid=(l+r)/2;

    if(k<=f[mid])

        r=mid-1;

    else

        l=mid+1;

  }

  return l;//

}

int main() {

   int n,k,i,j,front,end;

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

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

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

     front=end=1;

     fmin[front]=a[1];

     tmin[front]=1;

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

        end=dicmin(front,end,fmin,a[i]);

     //   printf("%d\n",end);

        fmin[end]=a[i];

        tmin[end]=i;

     }

     printf("%d",fmin[front]);

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

       end=dicmin(front,end,fmin,a[i]);

        fmin[end]=a[i];

        tmin[end]=i;

        while(tmin[front]<i-k+1&&front<=end)

            front++;

        printf(" %d",fmin[front]);

     }

     printf("\n");

     front=end=1;

     fmax[1]=a[1];

     tmax[1]=1;

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

        end=dicmax(front,end,fmax,a[i]);

        fmax[end]=a[i];

        tmax[end]=i;

     }

      printf("%d",fmax[front]);

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

        end=dicmax(front,end,fmax,a[i]);

        fmax[end]=a[i];

        tmax[end]=i;

        while(tmax[front]<i-k+1&&front<=end)

            front++;

        printf(" %d",fmax[front]);

     }

     printf("\n");

   }

return 0;}

poj 2823 二分法+单调队列的更多相关文章

  1. POJ 2823【单调队列】

    题意: 给出序列,找出每个连续长度为k的子序列的最大值和最小值. 思路: 裸单调队列... 单调队列这东西用的真的非常局限,大概只能用到这种情景中== 简单说一下维护: 添加元素,为了保持单调性,排除 ...

  2. poj 1821 Fence 单调队列优化dp

    /* poj 1821 n*n*m 暴力*/ #include<iostream> #include<cstdio> #include<cstring> #incl ...

  3. POJ 3017 DP + 单调队列 + 堆

    题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...

  4. POJ 1742 Coins ( 单调队列解法 )

    id=1742" target="_blank">题目链接~~> 做题感悟:第一次做的时候用的二进制优化.可是没注意到是险过.so也没去看单调队列的解法. 解 ...

  5. Dividing the Path POJ - 2373(单调队列优化dp)

    给出一个n长度的区间,然后有一些小区间只能被喷水一次,其他区间可以喷水多次,然后问你要把这个区间覆盖起来最小需要多少喷头,喷头的半径是[a, b]. 对于每个只能覆盖一次的区间,我们可以把他中间的部分 ...

  6. 刷题总结——Cut the Sequence(POJ 3017 dp+单调队列+set)

    题目: Description Given an integer sequence { an } of length N, you are to cut the sequence into sever ...

  7. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  8. POJ 1742 (单调队列优化多重背包+混合背包)

    (点击此处查看原题) 题意分析 给你n种不同价值的硬币,价值为val[1],val[2]...val[n],每种价值的硬币有num[1],num[2]...num[n]个,问使用这n种硬币可以凑齐[1 ...

  9. POJ 2823 Sliding Window + 单调队列

    一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1)   从队首删除 (2)   从队尾删除 (3)   从队尾插入 (4)   ...

随机推荐

  1. Liunx中虚拟机远程复制文件SCP命令

    1.首先在虚拟机中新建 CentOSA .CentOSB 从远处复制文件到本地目录 scp -r root@192.168.1.24:/root/aa ./ 从CentosB虚拟机器上的/root/a ...

  2. “仿QQ局域网聊天软件”项目-常用编程技巧总结

    1 信号槽篇 qqLogin loginDialog; QQ mainDialog; loginDialog.show(); //连接登陆窗口和主窗口 QObject::connect(&lo ...

  3. UE编辑器编译和运行java设置

    工具原料: UE编辑器 1点击“高级”,再点击“工具配置”. 2点击“插入”,在“菜单项”名称上输入“编译java程序”,在“命令行”里输入“javac %n%e”,在工作目录上填“%p”. 3切换到 ...

  4. Kafka~消费的有效期

    消息的过期时间 我们在使用Kafka存储消息时,如果已经消费过了,再永久存储是一种资源的浪费,所有,kafka为我们提供了消息文件的过期策略,可以通过配置server.properies来实现# vi ...

  5. [转]Paging, Searching and Sorting in ASP.Net MVC 5

    本文转自:http://www.c-sharpcorner.com/UploadFile/4b0136/perform-paging-searching-sorting-in-Asp-Net-mvc- ...

  6. 不讲CRUSH的Ceph教程是不完整的

    前面我们提到了Ceph是一个支持统一存储架构的分布式存储服务.简单介绍了Ceph的基本概念和基础架构包含的组件,其中最重要的就是底层的RADOS和它的两类守护进程OSD and Monitor.上篇文 ...

  7. python自动化--mock、webservice及webdriver模拟手机浏览器

    一.mock实现 自定义一个类,用来模拟未完成部分的开发代码 class Say(): def say_hello(self): pass 自定义返回值 import unittest from un ...

  8. Spartan6系列之芯片配置模式详解

    1.   配置概述 Spartan6系列FPGA通过把应用程序数据导入芯片内部存储器完成芯片的配置.Spart-6 FPGA可以自己从外部非易失性存储器导入编程数据,或者通过外界的微处理器.DSP等对 ...

  9. Spartan6系列之器件详细介绍、选型参考

    1.      概述 Spartan6系列是一类低成本高容量的FPGA,采用45nm低功耗敷铜技术,能在功耗.性能.成本之间很好地平衡:Spartan6系列内部采用双寄存器.6输入的LUT,还有一系列 ...

  10. Java二分法查找

    二分法查找 /** * 二分法查找 找不到返回-1 * @author yangzi * */ public class TwoFind { public static int twoFind(int ...