zoukankan      html  css  js  c++  java
  • poj 2823单调队列模板题

    #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(" ");
    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(" ");
    }
    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(" ");




    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(" ");
    }
     return 0;
    }

      


  • 相关阅读:
    Thymeleaf使用
    关闭被占用端口
    在map、model、modelAndView中存放数据 回显
    @RequestAttribute 注解
    @PathVariable、@RequestHeader、@RequestParam、@RequestBody 注解使用
    RESTful风格请求映射
    yml文件 数据回显
    JVM垃圾回收与一次线上内存泄露问题分析和解决过程
    比较java_io_Externalizable和Serializable
    关于java中的对象序列化
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410873.html
Copyright © 2011-2022 走看看