//使用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. Android输入法扩展之外接键盘中文输入

    大家想不想要这样一台Android  Surface平板,看着就过瘾吧. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/ ...

  2. UVA - 11388 GCD LCM

    II U C   ONLINE   C ON TEST  Problem D: GCD LCM Input: standard input Output: standard output The GC ...

  3. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  4. 用VLC搭建流媒体server

    VLC开元项目相当强大,我们既能够将其作为播放核心用于二次开发,又能够将其作为高性能的流媒体server.今篇博客主要讲用VLC搭建流媒体server. VLC搭建流媒体server步骤非常easy: ...

  5. android Vibrator 用法

    private Vibrator mvibrator; 1.服务的句柄  mvibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);  或者 ...

  6. 使用notepad运行python

    Notepad++ 是一个开源的文本编辑器,功能强大而且使用方便,一般情况下,Notepad++作为代码查看器,很方便,但是每次要运行的时候,总是需要用右键打开其他的IDE来编译和运行,总有些不方便. ...

  7. 给公司部门设计的SOA架构(转)

    新来老大年前开会说:各位同学,公司业务越来越重,未来几年要成倍增长......,我们要梳理出一套新架构,才能更好的支持N万用户.....,以后升职加薪当上....打败..... 想想还有点小激动呢,于 ...

  8. [置顶] think in java interview-高级开发人员面试宝典(七)

    上两周研发任务太紧了,所以担搁了一下,我们继续我们的面试之旅. 下面是一个基于图书系统的15道SQL问答,供大家参考 问题描述:本题用到下面三个关系表:CARD     借书卡.   CNO 卡号,N ...

  9. Semaphore实现Andoird版源代码剖析

    Semaphore是一个计数的信号量.从概念上来说,信号量维持一组许可(permits).acquire方法在必须的时候都会堵塞直到有一个许可可用,然后就会拿走这个许可.release方法加入一个许可 ...

  10. hello MemSQL 入门安装演示样例

    一,介绍 MemSQL号称世界上最快的分布式关系型数据库,兼容mysql但快30倍,能实现每秒150万次事务.原理是仅用内存并将SQL预编译为C++. 二,部署 官网下载地址:http://www.m ...