大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100003 int a[N],num[N],le[N],ri[N],cnt[N];
int d[N][],n,type; void RMQ_init()
{
int i,j;
for(i=;i<=type;i++)
d[i][] = cnt[i];
for(j=;(<<j)<=type;j++)
{
for(i=;i+(<<j)-<=type;i++)
d[i][j] = max(d[i][j-],d[i+(<<(j-))][j-]);
}
} int LOG[];
void getLog(int n)
{
for(int i=;i<=n;i++)
LOG[i] = (int)(log((double)i)/log(2.0));
} int RMQ(int l,int r)
{
int k = LOG[R-L+];
return max(d[l][k],d[r-(<<k)+][k]);
} int main()
{
int q,i,j,pos;
int l,r;
while(scanf("%d",&n)!=EOF && n)
{
scanf("%d",&q);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
a[] = -;
type = ;
for(pos=;pos<=n;pos++)
{
if(a[pos] != a[pos-])
{
if(pos != )
cnt[type] = pos-le[pos-];
num[pos] = ++type;
for(j=le[pos-];j<=pos-;j++)
ri[j] = pos-;
le[pos] = pos;
if(pos == n)
cnt[type] = ,ri[pos] = pos;
}
else
{
le[pos] = le[pos-];
num[pos] = num[pos-];
if(pos == n)
{
cnt[type] = pos - le[pos] + ;
for(j=le[pos];j<=n;j++)
ri[j] = n;
}
}
}
RMQ_init();
while(q--)
{
scanf("%d%d",&l,&r);
if(num[l] == num[r])
{
printf("%d\n",r-l+);
continue;
}
int lmax = ri[l]-l+;
int rmax = r-le[r]+;
int mmax;
if(num[l]+ > num[r]-)
mmax = ;
else
mmax = RMQ(num[l]+,num[r]-);
printf("%d\n",max(mmax,max(lmax,rmax)));
}
}
return ;
}

UVA 11235 Frequent Values ---RMQ的更多相关文章

  1. RMQ算法 以及UVA 11235 Frequent Values(RMQ)

    RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8)  内的最大值.数据量小 ...

  2. UVa 11235 Frequent values (RMQ && 区间出现最多次的数的次数)

    题意 : 给出一个长度为 n 的不降序序列,并且给出 q 个形如(L, R)的问询,问你这个区间出现的最多次的数的次数. 分析 : 很自然的想到将区间“缩小”,例如1 1 2 3 3 3就可以变成2 ...

  3. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...

  4. UVA 11235 Frequent values 线段树/RMQ

    vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...

  5. UVA - 11235 Frequent values

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  6. [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  7. POJ 3368 & UVA 11235 - Frequent values

    题目链接:http://poj.org/problem?id=3368 RMQ应用题. 解题思路参考:http://blog.csdn.net/libin56842/article/details/4 ...

  8. 数据结构(RMQ):UVAoj 11235 Frequent values

    Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...

  9. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

随机推荐

  1. Python正则表达式模块(re模块)

    Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的我来说还是有些难度的,于是只是了解了一些Python的基本语法,稍微深入一点的地方都没怎么了解.不过,到现在为止, ...

  2. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...

  3. ASP.NET 5新特性

    近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS.Cloud-ready环境配置降低了云端部 ...

  4. 二进制打印与逆序_C语言(转)

    //二进制逆序 by MoreWindows( http://blog.csdn.net/MoreWindows ) #include <stdio.h> //二进制打印函数 templa ...

  5. hdu 1518 拼正方形

    本题来自:http://acm.hdu.edu.cn/showproblem.php?pid=1518 题意:输入几个长度,判断能否拼成正方形. 以下部分参考了网友代码,终于ac啦. #include ...

  6. HTML 块元素

    分为3类 1. 结构块 只能包含块级元素.它们包含结构含义,但没有语义含义,也就是,不能说明内容是什么,只能说明其组织方式. <ol> <ul> <dl> < ...

  7. 初学Node(二)package.json文件

    package.json简介 package.json在Node项目中用于描述项目的一些基本信息,以及依赖的配置,一般每一个Node项目的根目录下都有一个package.json文件. 在项目的根目录 ...

  8. Windows Azure 上传 VM

    One of the great features of Windows Azure is VHD mobility. Simply put it means you can upload and d ...

  9. bootstrap 学习笔记

    bootstrap作为当下的流行框架不知道它怎么能行呢? 之前也看过好多bootstrap的网上教程,可是发现光看真的记不住,说起来也真是忧桑~重点还是要自己做才是真正的印象深刻.后来我发现解析模板是 ...

  10. Xcode 编译运行报错: CpResource /user/xxxx/ xxx Directory not empty

    之前遇到过相同的问题,总是记吃不记打,踩过的坑后面还会踩进去... 仅以次标记加深一下印象 错误特征RT 确认该类型错误是library或frameWork的search路径问题 首先找到编译错误的路 ...