//使用rmq办,ma[i][j],同i作为一个起点2^j阵列的最大长度值

//启动枚举问最长的子列

//枚举的最大长度2^(j-1)和2^(j)z之间

//然后在该范围内找到

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

using namespace std;

const int maxn=100010;





int a[maxn],ma[maxn][25],mi[maxn][25];

int n,m,k;

void rmq()

{

    for(int i=1;i<=n;i++)

    ma[i][0]=mi[i][0]=a[i];

    for(int j=1;j<=log((double)(n))/log(2.0);j++)

       for(int i=1;i+(1<<j)-1<=n;i++)

       {

           ma[i][j]=max(ma[i][j-1],ma[i+(1<<(j-1))][j-1]);

           mi[i][j]=min(mi[i][j-1],mi[i+(1<<(j-1))][j-1]);

       }

}





int query(int a,int b)

{

    int k=(int)(log((double)(b-a+1))/log(2.0));

    return max(ma[a][k],ma[b-(1<<(k))+1][k])-min(mi[a][k],mi[b-(1<<(k))+1][k]);

}





int Maxlen(int st,int pos)

{

   int j;

   for(j=0;(pos+(1<<j))<=n;j++)

   {

       int tmp=query(st,pos+(1<<j));

       if(tmp>k)

       {

           if(j==0)

           return pos;

           return Maxlen(st,pos+(1<<(j-1)));

       }

   }

   if((pos+(1<<(j-1))==n))

   return n;

   else

   return Maxlen(st,pos+(1<<(j-1)));

}

int main()

{

   // freopen("in.txt","r",stdin);

    while(scanf("%d%d%d",&n,&m,&k)!=EOF)

    {

        for(int i=1;i<=n;i++)

        scanf("%d",&a[i]);

        rmq();

        if(query(1,n)<m)

        {

            printf("0\n");

            continue;

        }

        int ans=0;

        for(int i=1;i<=n;i++)

        {

           int tmp=Maxlen(i,i-1);

           ans=max(ans,tmp-i+1);

           if(tmp==n||((n-i+1)<=ans))

           break;

        }

       printf("%d\n",ans);

    }

    return 0;

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

hdu3530Subsequence rmq的更多相关文章

  1. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

  2. UVA 11235Frequent values(RMQ)

    训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...

  3. 51nod1174(RMQ)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174 题意:中文题诶- 思路:RMQ模板题 关于RMQ: h ...

  4. 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  5. Gym 100646 F Tanks a Lot RMQ

    Problem F: Tanks a Lot Imagine you have a car with a very large gas tank - large enough to hold what ...

  6. (RMQ版)LCA注意要点

    inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...

  7. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  8. POJ3368Frequent values[RMQ 游程编码]

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17581   Accepted: 6346 ...

  9. [tem]RMQ(st)

    倍增思想 代码中有两个测试 #include <iostream> #include <cmath> using namespace std; const int N=1e5; ...

随机推荐

  1. Jquery事件的连接

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Linux Socket编程注意事项

    Socket API 是网络应用程序开发中实际应用的标准 API.虽然该 API 简单.可是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示怎样避免它们. 隐患 1.忽略返回状态 ...

  3. MySQL查看连接数

    MySQL查看连接数 1.查看部分连接数(数目较多时) show processlist; 2.查看所有连接数(数目较多时) show full processlist;

  4. eclipse设置关联文件打开方式

    window->preferences: General->Editors->File Associations

  5. IOS中的id与nil

    1 id id和void *并非完全一样.在上面的代码中,id是指向struct objc_object的一个指针,这个意思基本上是说,id是一个指向任何一个继承了Object(或者NSObject) ...

  6. grep命令参数和使用方法

    功能说明:查找符合串的条件的文件. 语言 法国:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  7. Ajenti 1.0 发布,服务器管理系统 - 开源中国社区

    Ajenti 1.0 发布,服务器管理系统 - 开源中国社区 Ajenti 1.0 发布,服务器管理系统

  8. 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区

    端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd    10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...

  9. linux zombie process相关学习

    1. zombie process是什么? zombie process是那些在系统中已经死掉的process, 通过ps -A | grep defunct可以查看系统中有多少zombie proc ...

  10. python六核心编程——条件和循环

    1.if声明 单 if 通过使用布尔运算符的声明 and , or 和 not. if-elif-else. elif即else if if expression1:      expr1_true_ ...