poj 3368 rmq ***
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
typedef long long ll;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
int n,m,tt;
const int MAXN = ;
int dp[MAXN][];
int mm[MAXN];
//初始化RMQ, b数组下标从1开始,从0开始简单修改
void initRMQ(int n,int b[])
{
mm[] = -;
for(int i = ; i <= n;i++)
{
mm[i] = ((i&(i-)) == )?mm[i-]+:mm[i-];
dp[i][] = b[i];
}
for(int j = ; j <= mm[n];j++)
for(int i = ;i + (<<j) - <= n;i++)
dp[i][j] = max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
//查询最大值
int rmq(int x,int y)
{
int k = mm[y-x+];
return max(dp[x][k],dp[y-(<<k)+][k]);
}
int a[MAXN],f[MAXN];
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d",&n)!=EOF)
{
if(n==) break;
scanf("%d",&m);
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
f[]=;
if(i!=)
{
if(a[i]==a[i-])
{
f[i]=f[i-]+;
}
else
f[i]=;
}
}
/*for(i=1;i<=n;i++)
{
printf("%d ",f[i]);
}
printf("\n");*/
initRMQ(n,f);
while(m--)
{
int uu,v;
scanf("%d%d",&uu,&v);
int u=uu;
while(u<=v&&a[u]==a[u-])
{
u++;
}
int ans=rmq(u,v);
ans=max(u-uu,ans);
printf("%d\n",ans);
}
}
}
poj 3368 rmq ***的更多相关文章
- POJ 3368/RMQ/线段数
		
题目链接 /* 给出一段序列,询问[L,R]区间内最大相同数的个数. 用一个很巧妙地方法,转化成求区间内的最大值的问题. RMQ维护区间最大值. MAX处理: */ for(int i=1;i< ...
 - poj 3368(RMQ模板)
		
题目链接:http://poj.org/problem?id=3368 题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 求解RMQ问题的算法有:搜索(比较 ...
 - poj 3368 Frequent values(RMQ)
		
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
 - POJ 3368 RMQ-ST
		
一直感觉RMQ水,没自己写过,今天写了一道题,算是完全独立写的,这感觉好久没有了... 一直以来,都是为了亚洲赛学算法,出现了几个问题: 1.学的其实只是怎么用算法,对算法的正确性没有好好理解,或者说 ...
 - POJ 3368 & UVA 11235 - Frequent values
		
题目链接:http://poj.org/problem?id=3368 RMQ应用题. 解题思路参考:http://blog.csdn.net/libin56842/article/details/4 ...
 - poj 3368 Frequent values(RMQ)
		
题目:http://poj.org/problem?id=3368 题意:给定n个数,顺序为非下降,询问某个区间内的数出现最多的数的 出现次数.. 大白书上的 例题..算是RMQ变形了, 对 原数组重 ...
 - POJ 3368 Frequent values (基础RMQ)
		
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14742 Accepted: 5354 ...
 - 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 求区间出现最多次数的数字的次数)
		
题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...
 
随机推荐
- SQL记录-PLSQL变量与常量文字
			
PL/SQL变量 变量是只不过是一个给定的存储区域,程序可以操纵的名称.PL/SQL每个变量具有一个特定的数据类型,它决定了大小和变量的存储器的值,可以说存储器和设置操作可以施加到可变内被存储的范 ...
 - 何凯文每日一句||DAY10
 - MongoDB探索之路(二)——系统设计之CRUD
			
1.构造实体类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
 - [转载]JavaScript 运行机制详解:再谈Event Loop
			
https://app.yinxiang.com/shard/s8/sh/b72fe246-a89d-434b-85f0-a36420849b84/59bad790bdcf6b0a66b8b93d5e ...
 - 【51Nod】1920 空间统计学   状压DP
			
[题目]1920 空间统计学 [题意]给定m维空间中的n个点坐标,满足每一维坐标大小都在[0,3]之间,现在对于[0,3*m]的每个数字x统计曼哈顿距离为x的有序点对数.\(n \leq 2*10^5 ...
 - 【转】详解linux vi命令用法
			
功能最强在的编辑器--vi vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人, 或多或少都觉得vi超级难用,但vi是最基本的编辑器 ...
 - 洛谷 P3916 【图的遍历】反向加边+dfs
			
前言: 对于这类带环的图,一般记忆化搜索不能很好的对所有遍历的边进行更新取值.因为环上的点可以相互到达,所以他们的答案因当是同步更新的,而dfs一旦你回溯完环上某个点就不会在更新这个点的答案了,做不到 ...
 - Dream------hive on spark
			
一.Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是MapReduce,和Hive on Tez的道理一样. 并且用的是$HIVE_HOME/bin/hive,l ...
 - appium-Could not obtain screenshot: [object Object]
			
原因 App页面已经被禁止截屏,禁用用户截屏的代码如下: getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); setConten ...
 - 不借助autolt实现下载文件到指定目录
			
今天尝试了下不用借助autolt完成下载文件到指定目录, 好处:在于集成回归,远程机可以绕过执行autolt程序权限问题,导致autolt程序无法调用,不能完成脚本的回归 Firefox浏览器已经成功 ...