链接:http://poj.org/problem?id=3368

题意:给出n个连续单调不递减数,q次询问,每次询问区间(L,R)出现频率最多的数,问出现了多少次

思路:因为n个数是单调不递减的,所以可以预处理一个频率数组cnt[ ],cnt[ i ]记录某个数到 i 位置时,出现了多少次,再预处理一个index数字,记录每一段相同的数字,最右端的位置,因为每次询问的时候可能会出现一部分连续的数被L这个位置隔开,cnt[i]只记录了某个数到i位置出现了多少次,被隔开的部分多算了,所以需要减去,每次询问(L,R)的时候分为两个部分,前一部分查询出 index[ L ] - l为被隔开的部分,后一部分用st表维护区间最值求即可。

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = ;
int n,q;
int a[maxn];
int cnt[maxn];
int index[maxn];
int Log[maxn];
int f[maxn][];
void pre(){
Log[] = ;
Log[] = ;
for(int i =;i<maxn;i++) Log[i] = Log[i/] + ;
}
void st(){
for(int i = ;i<=n;i++){
f[i][] = cnt[i];
}
for(int j = ;j<=Log[n+];j++){
for(int i = ;i+(<<j)-<=n;i++){
f[i][j] = max(f[i][j-],f[i+(<<(j-))][j-]);
}
}
}
int main(){
pre();
while(~scanf("%d",&n)){
if(n == ) break;
scanf("%d",&q);
for(int i = ;i<=n;i++){
scanf("%d",&a[i]);
if(i == ) cnt[i] = ;
if(a[i]!=a[i-]) cnt[i] = ;
else cnt[i] = cnt[i-] + ;
}
st();
for(int i = n;i>=;i--){
if(a[i] == a[i+]) index[i] = index[i+];
else index[i] = i;
}
while(q--){
int l,r;
int ans = ;
scanf("%d%d",&l,&r);
if(index[l] == index[r]){
ans = r - l + ;
}
else if(index[l] == index[l-]){//判断一下,如果在l左边的数和l位置的数相等,就说明被隔开了
int t = min(index[l],r)+;//算出后一部分区间的左端点
int ans1 = t - l ;//ans1单独计算 算出被隔开了多少数,这一部分单独计算
int s = Log[r-t+];//剩下部分用st表求
ans = max(ans1,max(f[t][s],f[r-(<<s)+][s]));//两者取最大值
}
else{
int s = Log[r-l+];
ans = max(f[l][s],f[r-(<<s)+][s]);
}
printf("%d\n",ans);
}
}
return ;
}

POJ 3368 (ST表)的更多相关文章

  1. POJ 3693 Maximum repetition substring(后缀数组+ST表)

    [题目链接] poj.org/problem?id=3693 [题目大意] 求一个串重复次数最多的连续重复子串并输出,要求字典序最小. [题解] 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+ ...

  2. POJ 3264 Balanced Lineup 【ST表 静态RMQ】

    传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total S ...

  3. Maximum repetition substring(POJ - 3693)(sa(后缀数组)+st表)

    The repetition number of a string is defined as the maximum number \(R\) such that the string can be ...

  4. POJ 3264 Balanced Lineup | st表

    题意: 求区间max-min st表模板 #include<cstdio> #include<algorithm> #include<cstring> #inclu ...

  5. POJ 3368 RMQ-ST

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

  6. POJ1821 单调队列//ST表 优化dp

    http://poj.org/problem?id=1821 当我们在考虑内层循环j以及决策k的时候,我们可以把外层变量i看作定值,以此来优化dp状态转移方程. 题意 有n个工人准备铺m个连续的墙,每 ...

  7. RMQ问题 - ST表的简单应用

    2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...

  8. st表、树状数组与线段树 笔记与思路整理

    已更新(2/3):st表.树状数组 st表.树状数组与线段树是三种比较高级的数据结构,大多数操作时间复杂度为O(log n),用来处理一些RMQ问题或类似的数列区间处理问题. 一.ST表(Sparse ...

  9. st表树状数组入门题单

    预备知识 st表(Sparse Table) 主要用来解决区间最值问题(RMQ)以及维护区间的各种性质(比如维护一段区间的最大公约数). 树状数组 单点更新 数组前缀和的查询 拓展:原数组是差分数组时 ...

随机推荐

  1. html页面提交JSON,ASP页面接收并打印

    jsonSubmit.html 1)能过 javascript函数驱动请求页 <!DOCTYPE html> <html> <head> <title> ...

  2. spring的困惑--org.springframework.web.servlet.DispatcherServlet noHandlerFound

    出现这种情况可能是代码没有更新到Tomcat服务器上

  3. java课后作业10.14

    一.简单总结一下java中类的初始化的规律: 1.类的构造函数优先 2.初始化块儿和定义时候的赋值,这俩个初始化方法优先级是一样的,在程序中谁最后执行,那么程序就采用谁的初始化值. 二.在java中想 ...

  4. shell awk学习3

    需求: 某文件aa的内容如下: a/p1/p2b/pp1c/ppp1/ppp3d/p1/p2/p3e/p1/p2/p3/p4 期望输出结果: a /p1 /p2 b /pp1 c /ppp1 /ppp ...

  5. Flink架构,源码及debug

    序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...

  6. Local changes were not restore

    问题是这样的: 更新代码的时候出现这个弹框,不能更新最新代码 解决如下: 直接点击Clear [注意:这个操作是放弃本地所有的修改,如果要找回代码千万不要点击] 再点击Apply Stash  就可以 ...

  7. 工控安全-PLC指纹提取的几种方法

    前言:PLC为可编程逻辑控制器,采用S7协议.其硬件本身存在许多漏洞,可以利用kali里面的漏洞模块或者modbus工具对其进行攻击,甚至直接可以进行未授权访问,只要其开启对外网的端口服务,那么我们就 ...

  8. GD库的基本信息,图像的旋转、水印、缩略图、验证码,以及图像类的封装

    GD库检测 <?php phpinfo(); ?> GD库安装• Windows 使用phpstudy • Linux 编译安装 –with-gd• Linux 编译安装扩展 GD库支持的 ...

  9. Vuejs+elementUI项目,在进行打包时,要注意的问题

    注意:打包之前,需要注意修改一些地方 (1)若是前后端分离开发的,前端开发过程中可能会在api.js中设置访问路径为服务器所在电脑的ip:端口,打包前,最好将它改回localhost:8080 (2) ...

  10. ALSA lib-ext plugin

    参考pcm_speex.c #include <stdio.h> #include <string.h> #include <unistd.h> #include ...