题意:

思路:

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. PKU_campus_2018_D Chocolate

    思路: 题目链接http://poj.openjudge.cn/practice/C18D/ kruskal过程中使用乘法原理计数. 实现: #include <bits/stdc++.h> ...

  2. 在Android上使用酷狗歌词API

    参考自http://blog.csdn.net/u010752082/article/details/50810190 代码先贴出来: public void searchLyric(){ final ...

  3. COGS 942. [東方S3] 比那名居天子

    Problem 1 比那名居天子(tenshi.cpp/c/pas) 题目描述 在幻想乡,比那名居天子是管理着『要石』的天人.『要石』是能够引发和镇压地震的存在,当然也可以用来改变地形.因为在幻想乡引 ...

  4. docker 新手入门 (阿里镜像仓库的使用)

    创建镜像仓库后的步骤是:   https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.546.79be52f3y ...

  5. 《少年先疯队》第九次团队作业:Beta冲刺第三天

    3.1 今日完成任务情况 姚玉婷:酒店系统中剩余功能的完善 马丽莎:酒店系统中管理员功能的测试 张   琼:酒店系统中会员功能的测试 孙苗坤:酒店系统中其余管理功能的测试文档的编写 3.2 成员贡献时 ...

  6. sh脚本写法

    1.shell注释符号: 1. 单行注释: “#” 2. 多行注释: : << ! 语句1 语句2 语句3 语句4 ! http://blog.csdn.net/lansesl2008/a ...

  7. C++函数形参为指针和指针引用的区别

    区别: 1.指针传参被调用函数的指针变量在栈内存中重新申请内存. 2.指针引用传参被调用函数的指针变量与调用函数的指针变量共用一块空间. // PointerCite.cpp : 定义控制台应用程序的 ...

  8. python3写冒泡排序

    1.概念理解: 冒泡排序:可以简单的理解为是列表中相近的元素,两两比较,小的在前面.最多需要len()-1次排序. 2.例子:a=[11,7,4,56,35,0] 3.代码实现: 4.输出结果: 第1 ...

  9. Shell读取一个表达式并计算其结果

    #!/bin/bash # 读取一个算数表达式并计算出结果 # 如果输入 # 5+50*3/20 + (19*2)/7 # 则结果为 # 17.929 read x printf "%.3f ...

  10. Intel CPU参数查询网站

    链接:https://ark.intel.com/#@Processors