zoukankan      html  css  js  c++  java
  • poj 2823 Sliding Window(单调队列)

    /*
    裸地单调队列..
    第一次写 写的好丑.... 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 1000010
    using namespace std;
    int n,k,x,a[maxn],t[maxn],q[maxn],head=1,tail;
    int init()
    {
        int f=1,x=0;char s=getchar();
        while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
        while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
        return x*f;
    }
    int main()
    {
        n=init();k=init();
        for(int i=1;i<=n;i++)a[i]=init();
        for(int i=1;i<=k-1;i++)
          {
              x=a[i];
              while(x<q[tail]&&tail>=head)tail--;
              q[++tail]=x;t[tail]=i;
              if(i-t[head]+1>k)head++;
          }
        for(int i=k;i<=n;i++)
          {
              x=a[i];
              while(x<q[tail]&&tail>=head)tail--;
              q[++tail]=x;t[tail]=i;
              if(i-t[head]+1>k)head++;
              printf("%d ",q[head]);
          }
        tail=0;head=1;printf("
    ");
        for(int i=1;i<=k-1;i++)
          {
              x=a[i];
              while(x>q[tail]&&tail>=head)tail--;
              q[++tail]=x;t[tail]=i;
              if(i-t[head]+1>k)head++;
          }
        for(int i=k;i<=n;i++)
          {
              x=a[i];
              while(x>q[tail]&&tail>=head)tail--;
              q[++tail]=x;t[tail]=i;
              if(i-t[head]+1>k)head++;
              printf("%d ",q[head]);
          }
        return 0;
    }
  • 相关阅读:
    set-find
    set-equal_range
    set-equal_range
    set-erase
    php 抽象类 静态 单体设计模式
    Servlet 工作原理解析
    职场上一个人情商高的十种表现
    快速学习一门新技术入门
    php中14中排序方式的实现
    php中对Mysql数据库的访问操作
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5702579.html
Copyright © 2011-2022 走看看