POJ 3368/RMQ/线段数
题目链接[http://poj.org/problem?id=3368]
给出一段序列,询问[L,R]区间内最大相同数的个数。
用一个很巧妙地方法,转化成求区间内的最大值的问题。
RMQ维护区间最大值。
MAX处理:
*/
for(int i = ; i < n; i++)
{
if(a[i] == a[i - ])
d[i] = d[i - ] + ;
else
d[i] = ;
}
/*
给出一个序列,1、1、1、1、2、3、4、5.
长度为8,求[2,8];即{1、1、1、2、3、4、5},暴力求出3,(前三个数相同),然后RMQ[5,8],取两者最大值。说一来麻烦,举个栗子。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn =+;
int a[maxn];
int d[maxn];
int dp[maxn][];
int n,q;
int l,r;
int RMQ(int l,int r)
{
int k=log((double)(r-l+))/log(2.0);//学长的写法,可以的。
return max(dp[l][k],dp[r-(<<k)+][k]);
}
int main ()
{
while(scanf("%d",&n),n)
{
scanf("%d",&q);
for(int i=;i<n;i++)
scanf("%d",&a[i]);
d[]=;
for(int i=;i<n;i++)
{
if(a[i]==a[i-])
d[i]=d[i-]+;
else
d[i]=;
}
for(int i=;i<n;i++)
dp[i][]=d[i];
for(int k=;(<<k)<=n;k++)
for(int i=;i+(<<k)-<n;i++)
dp[i][k]=max(dp[i][k-],dp[i+(<<(k-))][k-]);
for(int i=;i<q;i++)
{
scanf("%d%d",&l,&r);
l--;
r--;
if(l>r)
continue;
if(l==r)
printf("1\n");
else
{
int t=l;
while(t<r&&a[t]==a[t+])t++;
int ans=t-l+;
if(t==r||t+==r)
printf("%d\n",ans);
else
{
printf("%d\n",max(ans,RMQ(t+,r)));
}
}
}
}
return ;
}
POJ 3368/RMQ/线段数的更多相关文章
- poj 3368(RMQ模板)
题目链接:http://poj.org/problem?id=3368 题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 求解RMQ问题的算法有:搜索(比较 ...
- poj 3368 rmq ***
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. #include<cstdio> #include<iostream> #incl ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- NBU 2475 Survivors(RMQ线段树)
NBU 2475Survivors 题目链接:http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid=2475 题意:给定n个人,每个人有strengt ...
- 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 ...
- hdoj 1166 敌兵布阵 线段数和树状数组
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)
POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...
随机推荐
- C# Monads的实现(一)
了解Haskell语言的朋友都知道它是一门纯函数式编程,输出结果只跟输入参数相关,这导致Haskell不能有输入输出函数,因为不同的环境下,输入相同,但输出可能有所不同.Haskell语言中,变量的值 ...
- 一步一步学EF系列1【Fluent API的方式来处理实体与数据表之间的映射关系】
EF里面的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面,还有一个就是F ...
- 一些css3的特效 javascript的window对象 定时器 延时器等ing...
风车转动代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- Office Web Apps安装部署(一)
来源于:http://www.cnblogs.com/poissonnotes/p/3238238.html 系统要求为Windows Server 2012, 注意:安装Office Web App ...
- SharePoint 网站登录不上,3次输入用户名/密码白页、
来源于:http://www.cnblogs.com/jianyus/p/3249091.html 新搭建的SharePoint 2013环境,第一次干的这么憋屈的慌,先是接了一个Ghost的服务器, ...
- D - Digging(01背包,贪心)
D - Digging Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit St ...
- 让人头疼的CSS兼容
先说点Hack的知识(真正的高手是不用Hack的,但要成为高手必须通过Hack这一关) /* CSS属性级Hack */ color:red; /* 所有浏览器可识别*/ _color:red; /* ...
- JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
参考资料: 慕课网 DOM事件探秘 js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...
- Python基础篇-day3
主要内容:字典 集合 文件处理 字符编码 1.字典dict简介dict就是key value值,索引有意义,数据无序 key定义规则:a:不可变--数字.字符串.元组(可变--列表.字典)b:不能重复 ...
- 程序开发:MVC设计模式与应用
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面 显示分离的方法组织代 ...