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;
    }
  • 相关阅读:
    maven下载源配置
    nvm及node下载源配置
    SourceInsight 添加Symbol Lookup路径
    8.31-使用vscode进行c/c++程序设计
    10.08-vscode-plantuml建模
    6.26-vscode 配置文件
    3.5-VSCode 学习
    3.6-WizNote 常用快捷键
    10.04-CTEST-GTest
    180325-log4cplus
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5702579.html
Copyright © 2011-2022 走看看