题意:

思路:

C++

 #include<map>
#include<set>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define M 1000000
#define MAXN 210000
using namespace std; int g[MAXN][];
int last[M*];
int a[MAXN],st[MAXN],f[MAXN]; int ask(int x,int y)
{
if(x>y) return ;
int len=y-x+; int l=log(len)/log();
return max(g[x][l],g[y-(<<l)+][l]);
} int main()
{
freopen("data.in","r",stdin);
freopen("1.out","w",stdout);
int n,m,x,y;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=M;
st[i]=max(st[i-],last[a[i]]+);
last[a[i]]=i;
g[i][]=f[i]=i-st[i]+;
}
int l=log(n)/log();
for(int i=;i<=l;i++)
for(int j=;j+(<<(i-))<=n;j++)
g[j][i]=max(g[j][i-],g[j+(<<(i-))][i-]);
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
x++; y++;
int l=x; int r=y;
int tmp=x;
while(l<=r)
{
int mid=(l+r)/;
if(st[mid]<x) {tmp=mid;l=mid+;}
else r=mid-;
}
int ans=max(tmp-x+,ask(tmp+,y));
printf("%d\n",ans);
}
return ;
}

pascal

 const maxn=;
max=;
var n,m,i,x,y,t,j,ans,keypoint,l,r:longint;
a,opt,pre:array[..maxn]of longint;
rmq:array[..maxn,..]of longint;
f:array[-max..max]of longint;
ch:char;
function find(x,y:longint):longint;
var left,right,mid:longint;
begin
left:=x;right:=y;
while left<=right do begin
mid:=(left+right)shr ;
if pre[mid]<=y then left:=mid+
else right:=mid-;
end;
find:=left;
end;
function findmax(x,y:longint):longint;
var i,j:longint;
begin
i:=;j:=;
while *j<=y-x+ do begin
inc(i);
j:=j*;
end;
if rmq[x,i]>rmq[y+-j,i] then findmax:=rmq[x,i]
else findmax:=rmq[y+-j,i];
end;
begin
assign(input,'data.in'); reset(input);
assign(output,'right.out'); rewrite(output);
readln(n,m);
for i:= to n do read(a[i]);
fillchar(f,sizeof(f),);
opt[n]:=;
pre[n]:=n;
f[a[n]]:=n;
for i:=n- downto do begin
opt[i]:=opt[i+]+;
pre[i]:=pre[i+];
if (f[a[i]]>)and(f[a[i]]-i<opt[i]) then begin
opt[i]:=f[a[i]]-i;
pre[i]:=f[a[i]]-;
end;
f[a[i]]:=i;
end;
fillchar(rmq,sizeof(rmq),);
for i:= to n do rmq[i,]:=opt[i];
i:=;t:=;
while t<=n do begin
for j:= to n-t+ do begin
if rmq[j,i-]>rmq[j+( shl (i-)),i-] then rmq[j,i]:=rmq[j,i-]
else rmq[j,i]:=rmq[j+( shl (i-)),i-]
end;
inc(i);
t:=t*;
end;
for i:= to m do begin
readln(l,r);
inc(l);inc(r);
if l>r then begin
j:=l;l:=r;r:=j;
end;
keypoint:=find(l,r);
ans:=;
if keypoint>l then ans:=findmax(l,keypoint-);
if (keypoint<=r)and(r-keypoint+>ans) then begin
ans:=r-keypoint+;
end;
writeln(ans);
end;
close(input);
close(output);
end.

【LibreOJ10121】与众不同(RMQ,二分)的更多相关文章

  1. LOJ #10121 与众不同 (RMQ+二分)

    题目大意 :给你一个整数序列,定义一个合法子串为子串内所有数互不相同,会有很多询问,求区间$[L,R]$内最长连续合法子串长度 一道思维不错的$RMQ$题,NOIP要是考这种题可能会考挂一片 预处理出 ...

  2. *HDU3486 RMQ+二分

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...

  4. hdu 3486 Interviewe (RMQ+二分)

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  5. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  6. HDU 5089 Assignment(rmq+二分 或 单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  7. 玲珑杯 Round 19 B Buildings (RMQ + 二分)

    DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...

  8. codeforces 487B B. Strip(RMQ+二分+dp)

    题目链接: B. Strip time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. CodeForces 689D Friends and Subsequences (RMQ+二分)

    Friends and Subsequences 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/H Description Mi ...

  10. HDU 5726 GCD (RMQ + 二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...

随机推荐

  1. iOS开发XML解析

    xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundat ...

  2. centos 6.2用yum安装中文输入法

    centos 6.2用yum安装中文输入法 1.su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system-> ...

  3. Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission denied

    Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied  : Permission den ...

  4. (转)@Autowire注解与自动装配

    http://blog.csdn.net/yerenyuan_pku/article/details/52860713 前面我们已经学会使用@Resource注解注入属性,并且我们还编码剖析了@Res ...

  5. oracle插入中文乱码

    执行sql: select  userenv('language')     from dual;  --  AMERICAN_AMERICA.ZHS16GBK select * from v$nls ...

  6. uva1352 Colored Cubes LA3401

    白书第一章例题8 好麻烦! 正方体每面编号为0-5,那么根据顶点和正面,就能确定形态.一共6*4=24种形态. P[i]表示编号i所在位置.比如P[1]=3,表示第二面转到了第四面. 就可以表示出所有 ...

  7. upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量

    upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量 <Upload ...

  8. 【整理】iview Tree数据格式问题,无限递归树处理数据

    iview Tree数据格式问题,无限递归树处理数据 https://juejin.im/post/5b51a8a4e51d455d6825be20

  9. 创建线程的三种方式_Callable和Runnable的区别

    Java 提供了三种创建线程的方法 通过实现Runnable接口 通过继承Thread接口 通过Callable和Future创建线程 通过实现 Runnable 接口来创建线程 public cla ...

  10. 第三周:Excel

    一.Excel的常见函数: 1.文本清洗函数: https://ask.hellobi.com/blog/cbdingchebao/10149