【LibreOJ10121】与众不同(RMQ,二分)
题意:

思路:


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,二分)的更多相关文章
- LOJ #10121 与众不同 (RMQ+二分)
题目大意 :给你一个整数序列,定义一个合法子串为子串内所有数互不相同,会有很多询问,求区间$[L,R]$内最长连续合法子串长度 一道思维不错的$RMQ$题,NOIP要是考这种题可能会考挂一片 预处理出 ...
- *HDU3486 RMQ+二分
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...
- hdu 3486 Interviewe (RMQ+二分)
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...
- HDU 5089 Assignment(rmq+二分 或 单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- 玲珑杯 Round 19 B Buildings (RMQ + 二分)
DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...
- codeforces 487B B. Strip(RMQ+二分+dp)
题目链接: B. Strip time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- CodeForces 689D Friends and Subsequences (RMQ+二分)
Friends and Subsequences 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/H Description Mi ...
- HDU 5726 GCD (RMQ + 二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...
随机推荐
- 23中java设计模式(1)-- 策略模式
近来不太忙,就打算抽空看下源码补充一下知识,当我看了之后我发现看源码的关键是要弄清楚类之家的关系以及为何要这样的关系,否则如果只看具体的代码那不如去学习会儿算法. 于是就打算从设计模式入手,边学习边记 ...
- redis安装(windows)
软件环境:由于redis只有linux版,而windows版是微软自己做的,最新版只到3.2.100(linux的版本已经到5.x) 1.1.1. redis安装 首先去官网下载安装包 得到的安装文 ...
- ios 苹果原生系统定位 CLLocationManager
首先要干这些事 下面的方法亲测可用 ------------------------------------------------------------ DNLogFUNC //初始化位置管理对象 ...
- [实用技巧] Mac下面如何通过终端快速打开当前文件夹
Mac mac里面其实很简单,直接输入 open .,注意是open + 英文句点. Windows windows里面是start .,注意是start + 英文句点.
- html调用js提示方法名 is not defined处理方法
解决办法(方法名 is not defined): dosave=function(){ alert("方法名在前"); } 下面这种写法有时候会出现错误: function do ...
- HYSBZ 1086 王室联邦 (树的分块)
题意:国王想把他的国家划分成若干个省.他的国家有n个城市,是一棵树,即n-1条边,编号为1..n.为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个城市.每个省必须有 ...
- Linux Mini 安装 VMware Tools
1.挂载VMware Tools光盘 mount -t iso9660 /dev/cdrom /opt/ 2.安装依赖,安装Tools 将文件复制至 tmp目录解压VMwareTools-10.0.6 ...
- Graveyard LA3708
白书第一章例题4 思维. 先固定一点不动,假设最后一共N个点,那么编号为0,1,...N-1, 0不动,原来的n个点分别占据i/n*N的位置(记为pos),移动到pos四舍五入的位置即可. 证明一:有 ...
- drawer 抽屉 弹框 在 modal的后面的解决方案
drawer 抽屉 弹框 在 modal的后面的解决方案 方案1 在框内 弹出 <Drawer title="拍照" :transfer="false" ...
- PHP16 PHP访问MySQL
学习要点 PHP访问MySQL配置 PHP访问MySQL函数介绍 足球赛程信息管理 PHP访问MySQL配置 PHP.ini配置文件确认以下配置已经打开 extension=php_mysql.dll ...