$Codeforces\ 522D\ Closest\ Equals$ 线段树
正解:线段树
解题报告:
题目大意是说给定一个数列,然后有若干次询问,每次询问一个区间内相同数字之间距离最近是多少$QwQ$.如果不存在相同数字输出-1就成$QwQ$
考虑先预处理出每个点的$pre$和$lst$,就前一个相同数字的位置和后一个相同数字的位置$QwQ$,然后在线段树上维护下每个点到达前一个相同数字的最短距离
然后对询问按左端点排序,每次查询右端点区间内的$min$就成,然后删去数的话就把它后一个数字的那个最短距离$update$成$inf$就成鸭$QwQ$
然后就做完了?$QwQ$(话说这个为什么是个黑昂,,,什么瞎评分昂_(:з」∠)_
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=5e5+;
int n,m,nxt[N],as[N],nw=,inf,tr[N<<];
struct node{int l,r,id;}nod[N];
map<int,int>M; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(node gd,node gs){return gd.l<gs.l;}
void modify(ri nw,ri l,ri r,ri to,ri dat)
{
if(l==r)return void(tr[nw]=dat);
ri mid=(l+r)>>;mid>=to?modify(nw<<,l,mid,to,dat):modify(nw<<|,mid+,r,to,dat);
tr[nw]=min(tr[nw<<],tr[nw<<|]);
}
int query(ri nw,ri l,ri r,ri to_l,ri to_r)
{
if(to_l<=l && r<=to_r)return tr[nw];
ri mid=(l+r)>>,ret=inf;
if(mid>=to_l)ret=query(nw<<,l,mid,to_l,to_r);
if(mid<to_r)ret=min(ret,query(nw<<|,mid+,r,to_l,to_r));
return ret;
} int main()
{
// freopen("522d.in","r",stdin);freopen("522d.out","w",stdout);
n=read();m=read();memset(tr,,sizeof(tr));inf=tr[];
rp(i,,n)
{
ri tmp=read();
if(M[tmp])nxt[M[tmp]]=i,modify(,,n,i,i-M[tmp]);
M[tmp]=i;
}
rp(i,,m)nod[i]=(node){read(),read(),i};sort(nod+,nod++m,cmp);
rp(i,,m)
{
while(nw<nod[i].l){if(nxt[nw])modify(,,n,nxt[nw],inf);++nw;}
as[nod[i].id]=query(,,n,,nod[i].r);
}
rp(i,,m)printf("%d\n",(as[i]==inf?-:as[i]));
return ;
}
随机推荐
- 如何用Chrome浏览器下载网页音乐视频
打开网页,先让要下载的视频播放,右键单击选择审查元素(F12),选择上方的Network选项,按F5刷新,这个时候我们可以看到框架中Size下的不少文件数据数字正在变大,按size降序排列.点击表格的 ...
- P2993 [FJOI2014]最短路径树问题 点分治+最短路
这道题还是非常简单的,由于我们要保证最小字典序,因此我们需要把边进行排序,然后从大到小插入,因为链式前向星是倒着存的.我们只需要先跑一个最短路,然后查询边是不是在最短路上,这个可以通过枚举边并用 di ...
- uva 11665 Chinese Ink (几何+并查集)
UVA 11665 随便给12的找了一道我没做过的几何基础题.这题挺简单的,不过uva上通过率挺低,通过人数也不多. 题意是要求给出的若干多边形组成多少个联通块.做的时候要注意这题是不能用double ...
- ifram子页面与父页面的方法相互调用
parent.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- HTML静态网页--JavaScript-语法
1.基本数据类型: 字符串.小数.整数.日期时间.布尔型等. 2.变量: 都是通用类型var,可以随便存储其他类型的值,可以直接使用,不用定义,但习惯上定义.定义变量:var a:所有变量定义 都用v ...
- hdu 1548 A strange lift(迪杰斯特拉,邻接表)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU1711 Number Sequence 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目大意:最基础的字符串匹配,只不过这里用整数数组代替了字符串. 给你两个数组 \(a[1..N ...
- 小程序clearinterval无效解决
小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...
- hdu 1716 排序2(dfs)
排列2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Python--day32--struct模块
struct模块:该模块可以把一个类型,如数字,转成固定长度的bytes