POJ 3368 Frequent values RMQ 训练指南 好题
#include<cstdio>
#include<cstring> const int maxn=1e5+;
const int inf=0x3f3f3f3f; inline int max(int x,int y)
{
return x>y?x:y;
} int a[maxn];
int left[maxn];
int right[maxn];
int num[maxn];
int dp[maxn][]; void init()
{
memset(a,,sizeof a);
memset(left,-,sizeof left);
memset(right,-,sizeof right);
} void init_rmq(int n)
{
for(int i=;i<=n;i++)
dp[i][]=a[i];
for(int j=;(<<j)<=n;j++)
{
for(int i=;i+(<<j)-<=n;i++)
{
dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
} int query(int l,int r)
{
if(l>r)
return ;
int k=;
while((<<(k+))<=r-l+)
k++;
return max(dp[l][k],dp[r-(<<k)+][k]);
} void solve(int n,int q)
{
init_rmq(n);
for(int i=;i<q;i++)
{
int L,R;
scanf("%d%d",&L,&R);
if(num[L]==num[R])
{
printf("%d\n",R-L+);
continue;
}
int ans=max(right[num[L]]-L+,R-left[num[R]]+);
ans=max(ans,query(num[L]+,num[R]-));
printf("%d\n",ans);
}
return ;
} int main()
{
int cnt;
while(scanf("%d",&cnt))
{
if(!cnt)
break;
int q;
scanf("%d",&q);
init();
int pre=-inf;
int n=;
for(int i=;i<=cnt;i++)
{
int u;
scanf("%d",&u);
if(u!=pre)
{
right[n]=i-;
a[++n]=;
left[n]=i;
}
else
a[n]++;
num[i]=n;
pre=u;
}
right[n]=cnt; solve(n,q);
}
return ;
}
POJ 3368 Frequent values RMQ 训练指南 好题的更多相关文章
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...
- 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 【ST表RMQ 维护区间频率最大值】
传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS Memory Limit: 65536K Total S ...
- POJ 3368 Frequent values (基础RMQ)
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14742 Accepted: 5354 ...
- poj 3368 Frequent values(段树)
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13516 Accepted: 4971 ...
- poj 3368 Frequent values(RMQ)
题目:http://poj.org/problem?id=3368 题意:给定n个数,顺序为非下降,询问某个区间内的数出现最多的数的 出现次数.. 大白书上的 例题..算是RMQ变形了, 对 原数组重 ...
- (简单) POJ 3368 Frequent values,RMQ。
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- [RMQ] [线段树] POJ 3368 Frequent Values
一句话,多次查询区间的众数的次数 注意多组数据!!!! RMQ方法: 预处理 i 及其之前相同的数的个数 再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...
随机推荐
- php归获取当前目录下的二级目录数 和文件数
<?php header('Content-Type: text/html; charset=gb2312'); // $baseDir = "/www/u ...
- 【POJ3904】【P1202】水晶密码
说是莫比乌斯反演,其实只是玩儿玩儿内个miu函数而已…… 原题: wty 打算攻击 applepi 的用来存放机密数据的水晶系统. applepi 早有察觉,于是布置了一个密码系统来防备 wty ...
- Linux常用配置文件解析
网络相关配置文件 1./etc/sysconfig/network-scripts/ifcfg-ethx 网络参数IP/子网掩码/广播地址等的配置(重启有效) 2./etc/resolv.conf ...
- Abdicate
每次,打开背单词软件,背诵单词时,A打头的单词,第一个,永远会是 Abdicate,放弃,抛弃. 真是有意思. 想想在学习js高级程序设计一书时,一横心,决心手动输入书中出现过的每一个代码片段示例. ...
- dir:一行代码,提取出所有视频文件名称及路径
某次,部门接到一个任务,要求对公司现有的视频文件资料做一个统计整理分类的工作. 领导召集开会,问:两周时间够用吗? 统计整理分类工作的第一步骤是把视频文件名称来源类别信息录入到 excel 表格中,才 ...
- 亲测 logminer挖掘
LogMiner两种使用类型,一种是使用源数据库的数据字典分析DML操作,别一种是摘取LogMiner数据字典到字典文件分析DDL操作.检查下suppplemental logging:SQL> ...
- Sklearn库例子2:分类——线性回归分类(Line Regression )例子
线性回归:通过拟合线性模型的回归系数W =(w_1,…,w_p)来减少数据中观察到的结果和实际结果之间的残差平方和,并通过线性逼近进行预测. 从数学上讲,它解决了下面这个形式的问题: Lin ...
- C# winform 右下角弹出窗口结果
using System.Runtime.InteropServices; [DllImport("user32")] private static extern bool Ani ...
- 发送WIN+SAPCE键,WINDOWS,空格键
键盘代码部份转自:http://www.cnblogs.com/cpcpc/archive/2011/02/22/2123055.html 由于喜欢用CTRL+空格键切换输入法,在WIN8上有所不习惯 ...
- LitDB笔记
首先,LitDB存储的不是json,而是bson.这里就有问题了,json是可以无限扩展的,但是bson不行.所有insert的时候需要使用实体类而不是hashtable.但是它又提供了一个叫做Bso ...