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] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...
随机推荐
- 课堂所讲整理:HTML--7JavaScript的DOM操作
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...
- POJ-2152 Fire (树形DP)
题目大意:在一棵树中选出一些点,选每个点的代价为w(i),并且对于点 i ,在距离它lim(i)之内必须选一个点,使它作为 i 的依赖点.求最小代价. 题目分析:定义状态dp(u,k)表示使u为根节点 ...
- ThinkPHP缓存微信公众号access_token
access_token作为微信的全局票据,在高级接口中需要频繁调用,其有效期为7200秒,即2小时,而微信官方对调用Token的次数有限制(参见接口频率限制说明),获取access_token每日限 ...
- 【BZOJ1004】【HNOI20008】cards
看黄学长的代码才写出来的,sro_hzwer_orz 原题: 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给 ...
- [转]GIT PUSH Error 403的解决方法
http://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-reques ...
- shell中[[]]和[]的主要区别
[ ] 实际上是bash 中 test 命令的简写.即所有的 [ expr ] 等于 test expr 对 test 命令来说, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了. [[ e ...
- linux服务之crond
use the following command add entries to crontab should take effect right away. right away(立即,立刻) #c ...
- visual studio 编译时 出现 Files 的值 乱码
参考了:http://blog.163.com/jiang_tao_2010/blog/static/121126890201031031337332/ 最近在做程序时,在生成解决方法过程中,电脑出现 ...
- 【Redis】使用Redis Sentinel实现Redis HA
阅读目录 1 sentinel down-after-milliseconds mymaster 30000 sentinel failover-timeout mymaster 18000 sent ...
- H5元素
下面整理下我用到的H5元素 placeholder 显示input输出口的默认提示文本 <input type="search" name="user_search ...