题目链接[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/线段数的更多相关文章

  1. poj 3368(RMQ模板)

    题目链接:http://poj.org/problem?id=3368 题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 求解RMQ问题的算法有:搜索(比较 ...

  2. poj 3368 rmq ***

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. #include<cstdio> #include<iostream> #incl ...

  3. POJ 3368 Frequent values RMQ ST算法/线段树

                                                         Frequent values Time Limit: 2000MS   Memory Lim ...

  4. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

  5. NBU 2475 Survivors(RMQ线段树)

    NBU 2475Survivors 题目链接:http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid=2475 题意:给定n个人,每个人有strengt ...

  6. POJ 3368 RMQ-ST

    一直感觉RMQ水,没自己写过,今天写了一道题,算是完全独立写的,这感觉好久没有了... 一直以来,都是为了亚洲赛学算法,出现了几个问题: 1.学的其实只是怎么用算法,对算法的正确性没有好好理解,或者说 ...

  7. POJ 3368 & UVA 11235 - Frequent values

    题目链接:http://poj.org/problem?id=3368 RMQ应用题. 解题思路参考:http://blog.csdn.net/libin56842/article/details/4 ...

  8. hdoj 1166 敌兵布阵 线段数和树状数组

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

随机推荐

  1. MyBatisNet 学习

    SQL Maps Sql Maps是这个框架中最激动人心的部分,它是整个iBATIS Database Layer的核心价值所在.通过使用Sql Maps你可以显著的节约数据库操作的代码量.SQL M ...

  2. Visual Studio 2013 新增web项目IIS Express的64位版   转载来源http://www.cnblogs.com/jianyus/p/3524335.html

    使用Visual Studio 2012开发SharePoint的应该都遇到过下面的错误“SharePoint 在32位进程中不受支持”,而怎么修改目标平台都不好使,因为VS 2012所配备的IIS ...

  3. pumping lemma for finite regular language?

    some books describe pumping lemma as this: Let L be a regular language. Then there exists an integer ...

  4. 关于oracle数据库(7)查询1

    查询所有列数据 select * from 表名; 查询指定列数据 效率高于查询所有列数据 select 列名,列名,列名 from 表名; --先执行from后面的代码,找到表,在执行select后 ...

  5. html 图片上传预览

    Html5 upload img 2012年12月27日 20:36 <!DOCTYPE HTML> <html> <head> <meta http-equ ...

  6. sql参数化查询避免注入漏洞的原因探析

    网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...

  7. 设计模式5 合成模式 COMPOSITE

    一个合成是一组对象,其中某些对象可能包含其他对象. 目的:可以让客户程序把单个基本对象和对象的合成用一种统一的方式处理. 5.1 普通合成 Technorati Tags: adsf

  8. Echart图表相关配置项的设置

    饼状图提示框单位显示 在{c}后面即可添加任意单位内容. 一条记录含有多组数据的柱状图单位显示 标注单位的显示. 目前还未找到方法实现,当鼠标移动到标注上时设置显示单位. 标线单位的显示

  9. android ndk调用OpenGL 实现纹理贴图Texture

    android ndk调用OpenGL 实现纹理贴图Texture 时间 2014-06-25 05:24:39  CSDN博客 原文  http://blog.csdn.net/chrisfxs/a ...

  10. samba配置(基础版)

    1.  下载及安装Samba 推荐用yum来安装,这样它可以自己解决包的依赖关系,省时.省事又方便.一条命令搞定: yum -y install samba 2.  配置Samba 关于Samba的配 ...