【图灵杯 E也即POJ 3368】简单的RMQ
Description
给定一个数组,其中的元素满足非递减顺序。任意给定一个区间[i,j],求其中某个元素重复出现的最大次数。
Input
多组数据输入。每组数据的第一行包含两个整数n和q(1<=n,q<=100000),下一行包含n个整数a1,…,an(-100000<=ai<=100000,i∈{1,…,n}),用空格分隔,数列是升序的(ai<=ai+1)。接下来的q行,每行包含两个整数i和j(1<=i<=j<=n),表示给定区间[i,j]。
输入结束于0(自成一行)。
Output
对输入的q个区间,每个区间输出一个整数表示该区间内重复最多的元素出现的次数,用换行分隔。
Sample Input
10 3
-1 -1 1 1 1 1 3 10 10 10
2 3
1 10
5 10
0
Sample Output
1
4
3
【题目链接】:http://oj.acmclub.cn/problem.php?cid=1162&pid=4
【题意】
【题解】
构造一个数组b;
if(a[i]==a[i-1])
b[i] = b[i-1]+1;
else
b[i] = 1;
这个b数组
就表示第i个数字前面有多少个连续数字是和它相等的;
这样对于每一个区间L,R
除了最左端的b[L]以及右端的连续的a[i]==a[L]的位置不能肯定就一定有B[L]个以外,其他的都能确定出现次数最多的就是b的最大值;
这里可以再O(N)求出从该位置开始往后连续的有多少长度和这个位置的a[i]相同;设为dp[i]
则一开始令t=min(dp[L],R-L+1),L=L+dp[i];
然后取【L,R】中的b的最大值和t取较大值作为答案;(L>R的话,答案就是t)
【Number Of WA】
1
【完整代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N = 1e5;
int n, q;
int a[N+5], b[N+5], mx[N<<2],dp[N+5];
void build(int l,int r,int rt)
{
if(l==r)
{
mx[rt] = b[l];
return ;
}
int m = (l+r)>>1;
build(lson);
build(rson);
mx[rt] = max(mx[rt<<1], mx[rt<<1|1]);
}
int query(int L,int R,int l,int r,int rt)
{
if(L<=l && r<=R)
return mx[rt];
int m = (l+r)>>1;
int ans = 1;
if(L<=m)
ans = max(ans,query(L,R,lson));
if(R>m)
ans = max(ans,query(L,R,rson));
return ans;
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
//ios::sync_with_stdio(false);
while(scanf("%d",&n)!=EOF)
{
if (n==0) break;
scanf("%d",&q);
a[0] = -1e7;
memset(b,0,sizeof(b));
for(int i=1; i<=n; ++i)
{
scanf("%d",&a[i]);
if(a[i]==a[i-1])
b[i] = b[i-1]+1;
else
b[i] = 1;
}
dp[n] = 1;
for (int i = n-1;i >= 1;i--)
if (a[i+1]==a[i]){
dp[i] = dp[i+1]+1;
}
else
dp[i] = 1;
build(1,n,1);
while(q--)
{
int L,R;
scanf("%d%d",&L,&R);
int t=0;
t = min(dp[L],R-L+1);
L = L + t;
if(L>R)
printf("%d\n",t);
else
printf("%d\n",max(t,query(L,R,1,n,1)));
}
}
}
【图灵杯 E也即POJ 3368】简单的RMQ的更多相关文章
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- POJ 3368 Frequent values(RMQ 求区间出现最多次数的数字的次数)
题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...
- POJ 3368 Frequent values RMQ 训练指南 好题
#include<cstdio> #include<cstring> ; const int inf=0x3f3f3f3f; inline int max(int x,int ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...
- 图灵杯 E 简单的RMQ(UVA 11235)(RMQ)
E: 简单的RMQ 时间限制: 2 Sec 内存限制: 64 MB提交: 934 解决: 165[提交][状态][讨论版] 题目描述 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i, ...
- Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)A蔡老板的会议
题目描述 图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会.综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办 ...
- POJ 3368 RMQ-ST
一直感觉RMQ水,没自己写过,今天写了一道题,算是完全独立写的,这感觉好久没有了... 一直以来,都是为了亚洲赛学算法,出现了几个问题: 1.学的其实只是怎么用算法,对算法的正确性没有好好理解,或者说 ...
- (简单) POJ 3368 Frequent values,RMQ。
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- 【图灵杯 J】简单的变位词
Description 变位词是指改变某个词的字母顺序后构成的新词.蔡老板最近沉迷研究变位词并给你扔了一道题: 给你一些单词,让你把里面的变位词分组找出来.互为变位词的归为一组,最后输出含有变位词最多 ...
随机推荐
- laravel :Call to undefined function App\Http\Controllers\success() 解决方法
今天在调用方法时,报错如下:Call to undefined function App\Http\Controllers\success():方法已定义好了,所以我怀疑是未引入function.ph ...
- [读书笔记] Python 数据分析 (十二)高级NumPy
da array: 一个快速而灵活的同构多维大数据集容器,可以利用这种数组对整块的数据进行一些数学运算 数据指针,系统内存的一部分 数据类型 data type/dtype 指示数据大小的元组 str ...
- 小白都能看懂的Linux系统下安装配置Zabbix
实验环境: 操作系统:Centos 7.6 服务器ip:192.168.10.100 运行用户:root 网络环境:Internet Zabbix是一个基于web界面的提供分布式系统监控及网络功能的企 ...
- django-2-路由配置及渲染方式
<<<视图>>> (1)首先要注册创建好的app (2)配置路由 在app目录下新建一个urls.py模块 模块里面复制myproject目录下urls.py里面的 ...
- n&(n-1)位运算的妙用
一.n-1发生了什么 ①.二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1.最后一位为1.如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1.一直遇到1.减为0. 所以 ...
- PatentTips – Java native function calling
BACKGROUND OF INVENTION This invention relates to a system and method for providing a native functio ...
- cogs 2056. 无平方因子数
2056. 无平方因子数 ★☆ 输入文件:non.in 输出文件:non.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 给出正整数n,m,区间[n,m]内的无 ...
- 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务
知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...
- offsetLeft,Left,clientLeft具体解释
假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上側位置,整型,单位像素. obj.offsetLe ...
- hibernate之4.延迟载入
延迟载入: 仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库 get不支持延迟载入 @Test public void getTest(){ Session session=n ...