• bzoj2096[Poi2010]Pilots 单调队列


    2096: [Poi2010]Pilots

    Time Limit: 30 Sec  Memory Limit: 162 MB
    Submit: 983  Solved: 513
    [Submit][Status][Discuss]

    Description

    Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值。耍畸形一个人是不行的,于是他找到了你。

    Input

    输入:第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n<=3000,000),k代表Tz设定的最大值,n代表难度序列的长度。第二行为n个由空格隔开的整数ai(1<=ai<=2000,000,000),表示难度序列。

    Output

    输出:最大的字串长度。

    Sample Input

    3 9
    5 1 3 5 8 6 6 9 10

    Sample Output

    4
    (有两个子串的长度为4: 5, 8, 6, 6 和8, 6, 6, 9.最长子串的长度就是4)

    HINT

     

    Source

    维护两个单调队列 max min 搞搞就好

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define N 3000005
     6 #define ll long long 
     7 using namespace std;
     8 int n,m,a[N],mx[N],mn[N];
     9 int l[]={1,1},r[]={0,0};
    10 
    11 char gc(){
    12     static char s[1000000],*p1,*p2;
    13     if(p1==p2)p2=(p1=s)+fread(s,1,1000000,stdin);
    14     if(p1==p2)return EOF;
    15     return *p1++; 
    16 }
    17 int read(){
    18     int x=0;char ch=gc();
    19     while(ch>'9'||ch<'0')ch=gc();
    20     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=gc();
    21     return x;
    22 }
    23 int main(){
    24     m=read();n=read();
    25     for(register int i=1;i<=n;i++)a[i]=read();
    26     mx[++r[0]]=1;mn[++r[1]]=1;
    27     register int h=1,t=1,ans=1;
    28     while(t<n){
    29         t++;
    30         while(l[0]<=r[0]&&a[mx[r[0]]]<=a[t])r[0]--;
    31         while(l[1]<=r[1]&&a[mn[r[1]]]>=a[t])r[1]--;
    32         mx[++r[0]]=t;mn[++r[1]]=t;
    33         int tmp=a[mx[l[0]]]-a[mn[l[1]]];
    34         while(tmp>m){
    35              h++;
    36              while(mx[l[0]]<h)l[0]++;
    37              while(mn[l[1]]<h)l[1]++;
    38              tmp=a[mx[l[0]]]-a[mn[l[1]]];
    39         }
    40         if(t-h+1>ans)ans=t-h+1;
    41     }
    42     printf("%d
    ",ans);
    43     return 0;
    44 }
  • 相关阅读:
    OAuth2.0介绍
    C#集成FastDFS断点续传
    ABP集成WIF实现单点登录
    CentOS7下搭建FastDfs(V5.11)+Keepalived分布式集群部署
    【算法】之常见的排序算法
    【开发工具
    【C/C++】之C/C++快速入门
    【数据结构】之二叉树(Java语言描述)
    【数据结构】之散列链表(Java语言描述)
    【数据结构】之队列(Java语言描述)
  • 原文地址:https://www.cnblogs.com/wsy01/p/8110376.html
Copyright © 2020-2023  润新知