题目大意:在一个长度为n的不降序列中,有m次询问,每次询问(i,j)表示在区间(i,j)中找出出现次数最多的元素的出现次数。

题目分析:因为序列有序,可以将序列分段,并且记录每段的元素个数、每一个元素所属的段num(i)、每一个元素所属段的左端点l(i)及右端点r(i)。那么对于每次询问:

ans(i,j)=max(max(r(i)-i+1,j-l(j)+1),rmq(num(i)+1,num(j)-1))。

ans(i,j)=r-j+1  (如果i与j属于同一段)

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<vector>
# include<queue>
# include<list>
# include<set>
# include<map>
# include<string>
# include<cmath>
# include<cstdlib>
# include<algorithm>
using namespace std;
# define LL long long const int N=1005;
const int INF=1000000000;
const LL oo=0x7fffffffffffffff;
const double eps=1e-10; int n,m;
int a[N*100];
vector<int>v;
int num[N*100];
int L[N*100];
int R[N*100];
int d[N*100][20]; void RMQ_init()
{
int len=v.size();
for(int i=0;i<len;++i) d[i][0]=v[i];
for(int j=1;(1<<j)<=len;++j)
for(int i=0;i+(1<<j)-1<len;++i)
d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
} void init()
{
v.clear();
int cnt=1;
num[0]=0;
L[0]=0;
for(int i=1;i<n;++i){
if(a[i]==a[i-1]){
++cnt;
num[i]=num[i-1];
L[i]=L[i-1];
}else{
v.push_back(cnt);
num[i]=v.size();
L[i]=i;
cnt=1;
}
}
v.push_back(cnt);
R[n-1]=n-1;
for(int i=n-2;i>=0;--i){
if(a[i]==a[i+1])
R[i]=R[i+1];
else
R[i]=i;
}
RMQ_init();
} int query(int l,int r)
{
if(l>r) return 0;
int k=0;
while((1<<(k+1))<=r-l+1) ++k;
return max(d[l][k],d[r-(1<<k)+1][k]);
} int solve(int l,int r)
{
if(num[l]==num[r])
return r-l+1;
else{
return max(max(R[l]-l+1,r-L[r]+1),query(num[l]+1,num[r]-1));
}
} int main()
{
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
for(int i=0;i<n;++i)
scanf("%d",a+i);
init();
int l,r;
while(m--)
{
scanf("%d%d",&l,&r);
--l,--r;
printf("%d\n",solve(l,r));
}
}
return 0;
}

  

UVA-11235 Frequent values (RMQ)的更多相关文章

  1. UVA 11235 Frequent values(RMQ)

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

  2. 【POJ 3368】Frequent values(RMQ)

    Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...

  3. poj 3368 Frequent values(RMQ)

    题目:http://poj.org/problem?id=3368 题意:给定n个数,顺序为非下降,询问某个区间内的数出现最多的数的 出现次数.. 大白书上的 例题..算是RMQ变形了, 对 原数组重 ...

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

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

  5. UVA 11235 Frequent values 线段树/RMQ

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

  6. UVA - 11235 Frequent values

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

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

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

  8. poj 1806 Frequent values(RMQ 统计次数) 详细讲解

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1806 题目大意:给你一个非降序排列的整数数组,你的任务是对于一系列的询问,(i,j),回答序列中出现次 ...

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

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

随机推荐

  1. hdu 1034 (preprocess optimization, property of division to avoid if, decreasing order process) 分类: hdoj 2015-06-16 13:32 39人阅读 评论(0) 收藏

    IMO, version 1 better than version 2, version 2 better than version 3. make some preprocess to make ...

  2. Qt之控件美化

    级联样式表 (CSS) 包含应用于网页中的元素的样式规则.CSS 样式定义元素的显示方式以及元素在页中的放置位置.可以创建一个通用规则,只要 Web 浏览器遇到一个元素实例,或遇到一个分配给某个特定样 ...

  3. hadoop 8步走

    1.1读取hdfs中的文件.每一行解析成一个<k,v>.每一个键值对调用一次map函数        解析成2个<k,v>,分别是<0, hello you>< ...

  4. HDU 1114 Piggy-Bank (poj1384)

    储钱罐 [题目描述] 今年的ACM比赛在xxx国举行,为了比赛的顺利进行,必须提前预算好需要的费用,以及费用的来源.费用的主要来源是只进不出的金钱.其实原理很简单,每当ACM成员有任何一点小钱,他们就 ...

  5. Canopy v. 1.5.5 ubuntu安装流程

    官网的下载超级慢,还总是断,一断就失败了 我花费了7个小时终于在尝试了5次以后下载成功了,现在将网盘链接分享出来 https://yunpan.cn/cxt28gM26mxQU  访问密码 301d ...

  6. SMS短信PDU编码

    目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式.使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信:而PDU模式不仅支持 ...

  7. struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)

    在同一个项目中间,如果既用到servlet有用了struts2的框架,运行项目时可能无法正常使用servlet,原因是在配置struts2的核心控制器时<url-pattern>/*< ...

  8. electronic data interchange 电子数据交换

    electronic data interchange 电子数据交换

  9. IOS之Core Foundation框架和Cocoa Foundation框架的区别

    Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的 ...

  10. Ubuntu下Eclipse中文乱码问题解决(转)

    Ubuntu下Eclipse中文乱码问题解决 把Windows下的工程导入到了Linux下Eclipse中,由于以前的工程代码,都是GBK编码的(Windows下的Eclipse 默认会去读取系统的编 ...