题意: 给你一组数列, 查询区间内有出现次数最多的数的频数

RMQ ,

对于一个区间, 分为两部分, 从  L 开始连续到  T  , T + 1 到  R

显然 答案为  MAX (T – L + 1 , RMQ ( T+1, R))

对于 T, 可以先预处理出位置 Pos

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100000 + 131;
int Pos[maxn];
int Num[maxn];
int d[maxn][30];
int Fun[maxn];
int n, m; void RMQ_init()
{
for(int i = 0; i < n; ++i) d[i][0] = Fun[i];
for(int j = 1; (1<<j) <= n; ++j)
for(int i = 0; i + (1<<j) - 1 < n; ++i)
d[i][j] = max(d[i][j-1], d[i+(1<<(j-1))][j-1]);
} int RMQ(int L, int R)
{
int k = 0;
while((1<<(k+1)) <= R-L+1) k++;
return max(d[L][k], d[R-(1<<k)+1][k]);
} int main()
{
while(scanf("%d",&n) != EOF)
{
if(n == 0) break;
scanf("%d",&m);
for(int i = 0; i < n; ++i) scanf("%d",&Num[i]);
for(int i = 0; i < n; ++i)
{
if(i == 0) Fun[i] = 1;
else
{
if(Num[i] == Num[i-1]) Fun[i] = Fun[i-1] + 1;
else Fun[i] = 1;
}
}
//for(int i = 0; i < n; ++i) cout << Fun[i];
//cout <<endl; ////////////////////////
int Now = Num[n-1], pos = n-1;
for(int i = n-1; i >= 0; --i)
{
if(Num[i] == Now)
Pos[i] = pos;
else
{
Now = Num[i];
Pos[i] = i;
pos = i;
}
}
/*for(int i = 0; i < n; ++i) cout << Pos[i];
cout <<endl;*/
//////////////////////////
RMQ_init();
//cout << RMQ(2,5) <<endl;
int l, r;
for(int i = 0; i < m; ++i)
{
scanf("%d%d",&l,&r);
l--, r--;
int t = Pos[l];
//cout << t << endl;
if(t >= r)
{
printf("%d\n",r-l+1);
continue;
}
else
printf("%d\n", max(t-l+1,RMQ(t+1,r)));
}
}
}

POJ 3368的更多相关文章

  1. poj 3368 Frequent values(RMQ)

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

  2. POJ 3368 RMQ-ST

    一直感觉RMQ水,没自己写过,今天写了一道题,算是完全独立写的,这感觉好久没有了... 一直以来,都是为了亚洲赛学算法,出现了几个问题: 1.学的其实只是怎么用算法,对算法的正确性没有好好理解,或者说 ...

  3. poj 3368 Frequent values(RMQ)

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

  4. POJ 3368/RMQ/线段数

    题目链接 /* 给出一段序列,询问[L,R]区间内最大相同数的个数. 用一个很巧妙地方法,转化成求区间内的最大值的问题. RMQ维护区间最大值. MAX处理: */ for(int i=1;i< ...

  5. POJ 3368 & UVA 11235 - Frequent values

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

  6. poj 3368 Frequent values -Sparse-Table

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16537   Accepted: 5981 Description You ...

  7. poj 3368(RMQ模板)

    题目链接:http://poj.org/problem?id=3368 题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 求解RMQ问题的算法有:搜索(比较 ...

  8. POJ 3368 Frequent values (基础RMQ)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14742   Accepted: 5354 ...

  9. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】

    传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  10. POJ 3368 Frequent values(线段树区间合并)

    [题目链接] http://poj.org/problem?id=3368 [题目大意] 有一个有序序列,要求区间查询出现次数最多的数 [题解] 维护每个区间左端点和右端点,以及左右的长度,还有区间的 ...

随机推荐

  1. java 写一个 map reduce 矩阵相乘的案例

    1.写一个工具类用来生成 map reduce 实验 所需 input 文件 下面两个是原始文件 matrix1.txt 1 2 -2 0 3 3 4 -3 -2 0 2 3 5 3 -1 2 -4 ...

  2. 关于selenium的那些坑

    selenium 辅助工具 splinter 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位 ...

  3. JS 样式字符串 转 JSON对象

    项目中需要把div 上的样式值转成数据展示 形如: padding: 7px 2px 1px 3px; color: rgb(238, 65, 65); background-color: rgb(2 ...

  4. 开源框架.netCore DncZeus学习(二)配置连接

    配置连接字符串,update-database,初始数据后,访问报错,提示offset错误.因为本机上使用的sql2008. .net Core 2.X中的EF访问sqlserver2008默认使用的 ...

  5. 解决yum安装mysql时Requires: libc.so.6(GLIBC_2.17)(64bit)

    1.yum install mysql-community-server 1 2 3 4 5 6 7 Error: Package: mysql-community-libs-5.7.17-1.el7 ...

  6. python-文件读写操作

    打开文件: f=open('test.txt',mode='r',encoding='utf-8') 参数1  文件名,若非当前路径,需指出具体路径 参数2   mode:   文件打开模式 r    ...

  7. [C++]Linux之C编程异常[true未定义解决方案]

    C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的.bool类型有只有两个值:true =1 .false=0. 但是,C99标准里面,又定义了 ...

  8. python,异常处理

    # 该例子是对文件异常和类型异常分别进行的处理 try: sum = 1+' f=open('wo.txt') print(f.read()) f.close() except OSError as ...

  9. com.nostra13.universalimageloader 加载displayImage图片时图片模糊的处理办法

    配置显示参数: DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(defaultR ...

  10. QR 编码原理(三)

    一.日本汉字(KANJI)是两个字节表示的字符码,编码的方式是将其转换为13字节的二进制码制. 转换步骤为: 1.对于JIS值为8140(hex) 到9FFC(hex)之间字符: a)将待转换的JIS ...