链接: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. ACM常用STL容器

    // STL(标准模板库),由三大部分组成:容器,算法,迭代器 // STL六大组件:container(容器),algorthm(算法),iterator(迭代器) // function obje ...

  2. ng-简介

    Angular 是什么 Angular(读音['æŋgjʊlə])是一套用于构建用户界面的 JavaScript 框架.由 Google 开发和维护,主要被用来开发单页面应用程序. 类似于 Vue.j ...

  3. java通过递归统计文件大小

    思路就是通过文件的遍历,对一个文件夹中的非目录文件进行大小统计,并对其中目录文件进行相同的遍历操作,代码如下: package word; import java.io.File; import ja ...

  4. linux command - 在所有递归子文件夹中的py文件中,搜索包含指定字符串的文件

    find . -type f -iname "*.py" -exec grep -Hi "LAD" '{}' +

  5. 针对mysql8.0报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create

    折腾了好久,后来发现是版本问题,驱动和数据库不匹配导致. 原来用的是5.1.37的驱动.数据库是mysql5.7,可以连接成功. 就在我把数据库换成了8.0之后,所有的买点啥都报标题里的错误了.   ...

  6. threadpool 实例介绍第二篇

  7. A*模板(求K短路)(POJ2449)

    A*是bfs的优化,IDA*是dfs的优化 A*算法: 为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中.而A*算法最为核心的部分,就在于它的一个估值函数的设计上: f(n) ...

  8. php 爬虫采集

    概述 现在爬虫技术算是一个普遍的技术了,各个语言的爬虫百家争鸣,但是根据笔者自己的感觉还是python是主流.爬虫涉及到太多的东西,笔者并不是专业的爬虫工程师,只不过个人兴趣分享一下.由于笔者是php ...

  9. Ubuntu 16 服务器配置PHP+MySQL+Apache环境

    一.获取软件包资源并进行资源更新 apt是Ubuntu上默认的软件包管理器,使用它可以很容易进行各种软件安装,而且会自动帮你安装可能需要的依赖关系. 另一个强大的软件管理工具是 dpkg,可以用于安装 ...

  10. JDK 动态代理的实现

    JDK 动态代理的实现 虽然在常用的 Java 框架(Spring.MyBaits 等)中,经常见到 JDK 动态代理的使用,也知道了怎么去写一个 JDK 动态代理的 Demo,但是并不清楚实现原理. ...