【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]) ...
随机推荐
- JDK使用最多的模式之一--观察者模式
公司接到新任务,需要做一个气象监测应用.该应用将实现三个界面:当前气象状态,气象统计以及气象预报.应用从WeatherObject对象中获取所需数据:温度,湿度,气压.当然,为了可扩展性,该应用同时也 ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- xcopy递归拷贝
递归拷贝 ::xcopy SOURCE_DIR DES_DIR\ /s SOURCE_DIR后面不需要加反斜杠
- 【HEVC帧间预测论文】P1.5 Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule
Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule <HEVC标准介绍.HEVC帧间预测论文笔记&g ...
- vue路由导航守卫及前置后置钩子函数参数详解
首先构建一个测试demo如下图: 接着来探讨路由配置界面 import Vue from 'vue' import Router from 'vue-router' // import HelloWo ...
- hdu 5402 Travelling Salesman Problem (技巧,未写完)
题意:给一个n*m的矩阵,每个格子中有一个数字,每个格子仅可以走一次,问从(1,1)走到(n,m) 的路径点权之和. 思路: 想了挺久,就是有个问题不能短时间证明,所以不敢下手. 显然只要n和m其中一 ...
- 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件
基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...
- postman使用方法详解
postman的使用方法详解 Collections:在Postman中,Collection类似文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里 ...
- 如何安装多个pip包
要在命令行上安装多个软件包,只需将它们作为以空格分隔的列表传递,例如: pip install wsgiref boto
- 【2019.6.2】python:json操作、函数、集合、random()等
一.json操作: json就是一个字符串,从文件中读取json,必须是json格式.j'son串中必须是双引号,不能有单引号,单引号不能转换 1.1使用: import json #使用json先引 ...