题目大意是给出一个非降序排列的数组,然后n个询问,每次询问一个区间内出现次数最多的数的次数。

首先要弄清楚题目的是一个非降序的数组,那么说明相等的数都会在一起,类似于11223334569这样的,那么可以将其合并,由于这种多次区间询问的题一般用

到的是线段树或者RMQ,所以就往这方面去靠,用num[i]和cont[i]表示第i段的数值和出现的次数,val[i]表示位置i所在段的编号,lef[i]和ri[i]表示位置i所在段的左右端点

位置,那么对于每次查询(l,r)区间就分成了三段,ri[l]-l+1,r-lef[r]+1和中间一段,而中间的一段就完全是根据cont数组求的RMQ问题,然后三者取大的就好。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e5 + ;
int a[M],d[M][],cont[M],num[M];
int lef[M],ri[M],val[M];
int max(int x,int y) {return x>y?x:y;} void rmq(int x)
{
for (int i= ; i<=x ; i++) d[i][]=cont[i];
for (int j= ; (<<j)<=x ; j++)
for (int i= ; i+(<<j)-<x ; i++)
d[i][j]=max(d[i][j-],d[i+(<<(j-))][j-]);
} int rmq(int l,int r)
{
if (l>r) return ;
int k=;
while ((<<(k+))<=r-l+) k++;
return max(d[l][k],d[r-(<<k)+][k]);
} int main()
{
int n,q,i;
while (~scanf("%d",&n)&&n){
scanf("%d",&q);
for (i= ; i<=n ; i++) scanf("%d",a+i);
int ans=-M,j=;
memset(cont,,sizeof(cont));
for (i= ; i<=n ; i++)
{
if (a[i]!=ans)
{
val[j]=a[i];
ans=a[i];
int k=i,w=i;
while (ans==a[i]){
cont[j]++;
i++;
}
i--;
for ( ; k<=i ; k++)
{
num[k]=j;
lef[k]=w;
ri[k]=i;
}
j++;
}
}
j--;
rmq(j);
int l,r;
/* for (i=1 ; i<=j ; i++) cout<<val[i]<<" ";
cout<<endl;
for (i=1 ; i<=j ; i++) cout<<cont[i]<<" ";
cout<<endl;
for (i=1 ; i<=n ; i++) cout<<num[i]<<" ";
cout<<endl;
for (i=1 ; i<=n ; i++) cout<<lef[i]<<" ";
cout<<endl;
for (i=1 ; i<=n ; i++) cout<<ri[i]<<" ";
cout<<endl;*/
while (q--)
{
scanf("%d%d",&l,&r);
if (num[l]==num[r])
{
printf("%d\n",r-l+);
continue;
}
printf("%d\n",max(r-lef[r]+,max(rmq(num[ri[l]+],num[lef[r]-]),ri[l]-l+))); }
}
return ;
}

 

UVA 11235 (RMQ) 频繁出现的数值的更多相关文章

  1. Uva 11235 RMQ问题

    RMQ: 有一个不变的数组,不停的求一个区间的最小值. 使用倍增的思想优化到logN; d(i,j) 表示从 i 开始的,长度为2j的一段元素中的最小值. 那么状态转移方程: d(i,j) = min ...

  2. UVa 11235 RMQ

    首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运 ...

  3. UVa 11235 (RMQ) Frequent values

    范围最值问题,O(nlogn)的预处理,O(1)的查询. 这个题就是先对这些数列进行游程编码,重复的元素只记录下重复的次数. 对于所查询的[L, R]如果它完全覆盖了某些连续的重复片段,那么查询的就是 ...

  4. uva 11235 RMQ范围最大值

    题目大意:给一个整数上升序列,对于一系列询问区间(i,j),回答这段区间出现次数最多值所出现的次数. 分析:一个上升序列,相同的值聚集在一起,把相同的值的区间看作一个整体,假设这样的整体有n个,把他们 ...

  5. UVA 11235 RMQ算法

    上次的湘潭赛的C题,用线段树敲了下还是WA,不知道为何,我已经注意了处理相同数据,然后他们当时用的RMQ. 所以学了下RMQ,感觉算法思想是一样的,RMQ用了DP或者是递推,由单个数到2^k往上推,虽 ...

  6. UVA 11235 Frequent values 线段树/RMQ

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

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

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

  8. UVA 11235 (游程编码+ST算法)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846 题目大意:给定一个升序序列,有q次询问,每次询问(L,R) ...

  9. UVa 12299 RMQ with Shifts(移位RMQ)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...

随机推荐

  1. Java学习02 (第一遍)

    巩固基础: byte 1个字节 -128到127 = 2^(字节数*8-1),转变2进制,01111111(负127)到11111111(正127) ,存在正负零(00000000),正零保留,负零补 ...

  2. Pandas时间序列

    Pandas时间序列 pandas 提供了一组标准的时间序列处理工具和数据算法 数据类型及操作 Python 标准库的 datetime datetime 模块中的 datetime. time. c ...

  3. Python 图示集绵

    http://nbviewer.jupyter.org/github/pyecharts/pyecharts-users-cases/blob/master/notebook-users-cases/ ...

  4. Excel 如何快速切换到最后一行

    1.快速切换到最后一行,是ctrl+↓箭头(来源:百度) 2. http://www.office68.com/excel/22936.html     一.定位到第一个单元格        方法1: ...

  5. 媒体类型 & 媒体查询

    [媒体类型 & 媒体查询] @media 规则允许在相同样式表为不同媒体设置不同的样式. 在下面的例子告诉我们浏览器屏幕上显示一个14像素的Verdana字体样式.但是如果页面打印,将是10个 ...

  6. 关于Android file.createNewFile() 失败的问题

    [关于Android file.createNewFile() 失败的问题] 需要注意的是:要先对设计的文件路径创建文件夹 , 然后在对文件进行创建. 参考:http://blog.csdn.net/ ...

  7. arguments对象的callee属性和caller属性

    js中的arguments对象代表正在执行的函数和调用它的函数的参数.arguments对象有两个属性,callee和caller.collee表示当前正在执行的方法,caller表示调用该方法的对象 ...

  8. 算法之LOWB三人组之冒泡排序

    排序 冒泡排序(Bubble Sort)时间复杂度为O(n^2) 列表每两个相邻的数,如果前面比后面大,则交换这两个数 一趟排序完成后,则无序区减少一个数,有序区增加一个数. def bubble_s ...

  9. 并发编程(IO多路复用)

    阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchro ...

  10. js navigator对象

    原文:https://www.cnblogs.com/huyihao/p/6003110.html Navigator 对象包含有关浏览器的信息. 很多时候我们需要在判断网页所处的浏览器和平台,Nav ...