题意:

思路:

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. BOM学习-javascript计时器小结

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. JVM补充一

    一.为什么废弃永久代(PermGen) 2.1 官方说明 参照JEP122:http://openjdk.java.net/jeps/122,原文截取: Motivation This is part ...

  3. spring @value 为什么没有获取到值

    1.配置文件的路径没有扫描到 2.注解的bean 不是通过spring托管的.bean 要通过spring 注解,引用的时候要用@Autowired  自动注入的bean 不要用new 出来的bean ...

  4. jmeter+ant+jenkins

    前提:需要先配置下面两个环境,严格按照本人的配置去配,要不然后面你会看不懂 (1)ant+jmeter集成:http://blog.csdn.net/qq_23101033/article/detai ...

  5. 第一周作业javaee strainmap

  6. android studio更新后,构建gradle卡在Refreshing Gradle Project 解决办法

    Android Studio每次更新版本都会更新Gradle这个插件,但由于墙的问题,导致更新很慢或者最后更新失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 ...

  7. dom和bom是什么?

    DOM:文档对象模型,描述了处理网页内容的方法和接口.最根本对象是document(window.document). 由于DOM的操作对象是文档,所以DOM和浏览器没有直接关系. 部署在服务器上的文 ...

  8. .NET多线程总结

    1.不需要传递参数,也不需要返回参数 我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: public void test() { ThreadStart threadStart = ...

  9. PHP04 HTTP协议入门(转)

    HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...

  10. ie8兼容性

    ie8下不支持css的nth-child()样式解决方法一:使用jQuery的nth-child()方法例:$(".ability-head-list ul li:nth-child(1) ...