链接: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. eclipse 项目资源与 java 编译器级别不致总是;说明资源路径位置类型Java编译器级别不匹配t

    问题:Description Resource Path Location Type Java compiler level does not match t 今天在自己项目中整合HBase API的 ...

  2. formateDate

    function formateDate(fmt, date) { let _this = new Date(date) let o = { "M+": _this.getMont ...

  3. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  4. Excel创建下拉列表限制数据有效性

    方法 选中目标区域,点击菜单栏[数据]-[数据验证]-验证条件选择[序列]-输入所需文本即可

  5. Node.js_1.1

    Node.js简介 Node.js是一个能够在服务器端运行JavaScript的开源代码.跨平台JavaScript运行环境 Node采用Google开发的V8引擎运行js代码,使用事件驱动.非阻塞和 ...

  6. Centos 安装SVN

    Centos 安装SVN  centos(我这里使用的是CentOS7)下yum命令即可方便的完成安装 $ sudo yum install subversion 测试安装是否成功: $ svnser ...

  7. 54.Python中Meta类常见的配置

    对于一些模型级别的配置.我们可以通过在模型中定义一个类,叫做Meta.然后在这个类中添加一些属性来控制模型的作用. 注意:添加的这个类一定要是Meta,否者的话Django就会不能够识别. from ...

  8. Python 绘图 cookbook

    目录 python绘图常见bug matplotlib包加载 解决中文绘图乱码解决方法 解决python中用matplotlib画多幅图时出现图形部分重叠的问题 python绘图常见bug matpl ...

  9. 4 Values whose Sum is 0 UVA 1152

    题目链接:https://vjudge.net/problem/UVA-1152 这题题意就是在四个集合内.每个集合分别里挑一个数a,b,c,d,求a+b+c+d=0有多少种选法. 暴力的话就是四重循 ...

  10. Phalanx HDU - 2859 dp

    #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> us ...