/*
线段树区间合并
维护几个信息 到时候乱搞一下就好了
开始T了 有一种情况可以不用递归 直接算出来
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
#define lc (k<<1)
#define rc (k<<1)+1
#define mid ((l+r)>>1)
using namespace std;
int n,m,a[maxn],ls[maxn*],rs[maxn*],ln[maxn*],rn[maxn*],s[maxn*];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Build(int k,int l,int r){
if(l!=r){
Build(lc,l,mid);
Build(rc,mid+,r);
s[k]=max(s[lc],s[rc]);
if(rn[lc]==ln[rc])
s[k]=max(s[k],rs[lc]+ls[rc]);
ln[k]=ln[lc];rn[k]=rn[rc];
ls[k]=ls[lc];rs[k]=rs[rc];
if(ls[lc]==mid-l+&&rn[lc]==ln[rc])
ls[k]=max(ls[k],ls[lc]+ls[rc]);
if(rs[rc]==r-mid&&rn[lc]==ln[rc])
rs[k]=max(rs[k],rs[rc]+rs[lc]);
}
else{
ls[k]=rs[k]=;ln[k]=rn[k]=a[l];s[k]=;
}
}
int Query(int k,int l,int r,int x,int y){
if(x<=l&&y>=r)return s[k];
int ret=,L,R;
if(y<=mid)return Query(lc,l,mid,x,y);
else if(x>mid)return Query(rc,mid+,r,x,y);
else{
if(rn[lc]==ln[rc]){
L=max(mid-rs[lc]+,x);
R=min(mid+ls[rc],y);
ret=mid-L++R-mid;
}
//ret=Query(lc,l,mid,max(mid-rs[lc]+1,x),mid)
//+Query(rc,mid+1,r,mid+1,min(mid+ls[rc],y));可以只结算出来 QAQ T了好几遍
ret=max(ret,Query(lc,l,mid,x,y));
ret=max(ret,Query(rc,mid+,r,x,y));
}
return ret;
}
int main()
{
while(){
n=init();if(n==)break;
m=init();
for(int i=;i<=n;i++)a[i]=init();
Build(,,n);
while(m--){
int L,R;
L=init();R=init();
printf("%d\n",Query(,,n,L,R));
}
}
return ;
}
/*
ST表做法 比较巧妙 时间差不多 空间大一些
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int n,m,a[maxn],c[maxn],f[maxn][],lst[maxn],p[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Clear(){
memset(c,,sizeof(c));
memset(f,,sizeof(f));
memset(lst,,sizeof(lst));
}
void Get_p(){
for(int i=;i<=maxn-;i++)
for(int j=;j<=;j++)
if((<<j)>i){
p[i]=j-;break;
}
}
void Get_ST(){
for(int i=;i<=n;i++)f[i][]=c[i];
for(int j=;j<=;j++)
for(int i=;i+(<<j)-<=n;i++)
f[i][j]=max(f[i][j-],f[i+(<<j-)][j-]);
}
int Query(int l,int r){
if(l>r)return ;
int k=p[r-l+];
return max(f[l][k],f[r-(<<k)+][k]);
}
int main()
{
Get_p();
while(){
n=init();if(n==)break;m=init();
Clear();
for(int i=;i<=n;i++)a[i]=init();
for(int i=;i<=n;i++)
if(a[i]==a[i-])c[i]=c[i-]+;
else c[i]++;
for(int i=n;i>=;i--)
if(a[i]==a[i+])lst[i]=lst[i+];
else lst[i]=i;
Get_ST();
while(m--){
int L,R,mxx=,mx=;
L=init();R=init();
mxx=Query(lst[L]+,R);
mx=min(lst[L],R)-L+;
printf("%d\n",max(mxx,mx));
}
}
return ;
}

Poj 3368 Frequent values的更多相关文章

  1. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】

    传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  2. poj 3368 Frequent values(RMQ)

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

  3. POJ 3368 Frequent values (基础RMQ)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14742   Accepted: 5354 ...

  4. poj 3368 Frequent values(段树)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13516   Accepted: 4971 ...

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

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

  6. poj 3368 Frequent values -Sparse-Table

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16537   Accepted: 5981 Description You ...

  7. POJ 3368 Frequent values(RMQ 求区间出现最多次数的数字的次数)

    题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...

  8. poj 3368 Frequent values(RMQ)

    题目:http://poj.org/problem?id=3368 题意:给定n个数,顺序为非下降,询问某个区间内的数出现最多的数的 出现次数.. 大白书上的 例题..算是RMQ变形了, 对 原数组重 ...

  9. (简单) POJ 3368 Frequent values,RMQ。

    Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...

  10. POJ 3368 Frequent values(线段树区间合并)

    [题目链接] http://poj.org/problem?id=3368 [题目大意] 有一个有序序列,要求区间查询出现次数最多的数 [题解] 维护每个区间左端点和右端点,以及左右的长度,还有区间的 ...

随机推荐

  1. CoreLocation MKMapView

    高德开发者平台 有开发指南 iOS9配置网络: <key>NSAppTransportSecurity</key> <dict> <key>NSAllo ...

  2. ubuntu wubi安装注意事项

    从这个镜像下载 http://mirrors.163.com/ubuntu-releases/12.10/ ubuntu-12.10-desktop-amd64.iso 和 wubi.exe然后放到同 ...

  3. 【HDOJ】3220 Alice’s Cube

    状态压缩+逆向BFS.方向数组就是任意相邻的两点(初始化时减1),每个顶点均有4个相邻点.因此,共有16*4/2=32个方向.按序排列即可找到. /* 3220 */ #include <ios ...

  4. bzoj1146

    这是一道无比繁琐的题目话说这道题使我第一次练dfs序,比较感动:首先dfs序就是在dfs过程中按照访问的顺序给每个点标上两个“时间戳”一个是第一次访问到点i时的时间戳c[i],一个是访问完以i为根时的 ...

  5. 火狐浏览器对border-radius的渲染问题

  6. datetime和timer的使用(小小幻灯片)

    一:展示图片 每秒换一次图片,一共六十张图片,00-59 二:代码 a,设计代码 namespace timePicture { partial class Form1 { /// <summa ...

  7. 编写一个单独的Web Service for Delphi7(步骤)

    1新建一个SOAP Server Application,在提示输入接口时输入MyHello,把所有文件保存在一个叫Ser的目录下,其中一个包含TWebModule1的文件保存为main.pas.在M ...

  8. WEB性能测试:你应该带上VisualStudio2010

    原文地址:http://www.16aspx.com/Article/62 在Web性能测试方面,增加了循环(Loops)和条件(Conditions),让开发人员可以为他们的应用程序写出更复杂,更智 ...

  9. 浅谈异步IO各模型优缺点

    本文只讨论OverLapped I/O的三种异步模型及完成端口,像select.SWASelect不作讨论,讨论顺序从劣到优,方便于循序渐进地对比,更容易区分各模型之间的差别. 1. OverLapp ...

  10. errno与perror

    很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码,请查阅errno(3)的Man Page了解各种错误码,errno在头文件errno.h中声明, ...