zoukankan      html  css  js  c++  java
  • poj 2823 二分法+单调队列

    #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 ",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(" ");
         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(" ");
       }
    return 0;}
  • 相关阅读:
    序列化组件
    restful_framework之视图组件
    如何优化MYSQL数据库
    pycharm如何显示工具栏
    cmd常用命令
    pycharm如何回到过去某个时间
    RESTful API设计规范
    MyBatis之传入参数——parameterType(转)
    Spring3事务管理——使用@Transactional 注解(转)
    Eclipse 启动问题:'Initilizing Java Tooling' has encountered a problem(。。。)
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410869.html
Copyright © 2011-2022 走看看