求区间内相差最小的两个数的差

分sqrt(n)块,预处理两个数在块内,以及一个数在块内一个数在零散部分的情况,询问时归并排序处理两个数都在零散部分的情况,时间复杂度$O((n+q)\sqrt{n})$。

#include<bits/stdc++.h>
const int N=,inf=0x7fffffff;
char ib[N*],*ip=ib;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
int abs(int x){return x>?x:-x;}
int min(int a,int b){return a<b?a:b;}
void mins(int&a,int b){if(a>b)a=b;}
int n,m,B,bid[N],ls[],rs[],mb[N],bc=,f[N][],ans,bb[][],av[N];
struct pos{
int x,y;
bool operator<(const pos&w)const{return y<w.y;}
}as[N],bs[N];
void block(int l,int r,int c){
std::sort(as+l,as+r+);
ls[c]=l,rs[c]=r;
for(int i=l;i<=r;++i)bid[i]=c,av[i]=as[i].y;
bb[c][c]=inf;
for(int i=l+;i<=r;++i)mins(bb[c][c],av[i]-av[i-]);
}
void get(int l,int r){
int R=rs[bid[l]],xp=,xs[];
for(int i=ls[bid[l]];i<=R;++i)if(as[i].x>=l&&as[i].x<=r)xs[xp++]=as[i].y;
for(int i=;i<xp;++i)mins(ans,xs[i]-xs[i-]);
}
void get(int l,int pl,int pr,int r){
int L=bid[l],R=bid[r],ys[],yp=,yl=,zs[],zp=;
for(int i=ls[L];i<=rs[L];++i)if(as[i].x>=l)ys[yp++]=as[i].y;
ys[yp]=inf;
for(int i=ls[R];i<=rs[R];++i)if(as[i].x<=r){
int y=as[i].y;
for(;ys[yl]<y;zs[zp++]=ys[yl++]);
zs[zp++]=y;
}
for(;yl<yp;zs[zp++]=ys[yl++]);
for(int i=;i<zp;++i)mins(ans,zs[i]-zs[i-]);
}
int cal(int l,int r){
int zs[],zp=;
bb[l][r]=min(bb[l+][r],bb[l][r-]);
int*al=av+ls[l],*ar=av+rs[l]+;
int*bl=av+ls[r],*br=av+rs[r]+;
while(al!=ar&&bl!=br)zs[zp++]=*al<*bl?*al++:*bl++;
while(al!=ar)zs[zp++]=*al++;
while(bl!=br)zs[zp++]=*bl++;
for(int i=;i<zp;++i)mins(bb[l][r],zs[i]-zs[i-]);
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_(),m=_();
B=sqrt(n);
for(int i=;i<=n;++i){
int y=_();
as[i]=bs[i]=(pos){i,y};
}
for(int i=;i<=n;i+=B)block(i,min(i+B-,n),++bc);
for(int l=bc;l;--l){
for(int r=l+;r<=bc;++r)cal(l,r);
}
std::sort(bs+,bs+n+);
for(int i=;i<=bc;++i)mb[i]=-inf/;
for(int i=;i<=n;++i){
int x=bs[i].x,y=bs[i].y;
for(int j=;j<=bc;++j)f[x][j]=y-mb[j];
mb[bid[x]]=y;
}
for(int i=;i<=bc;++i)mb[i]=inf;
for(int i=n;i;--i){
int x=bs[i].x,y=bs[i].y;
for(int j=;j<=bc;++j)mins(f[x][j],mb[j]-y);
for(int j=bid[x]+;j<=bc;++j)mins(f[x][j],f[x][j-]);
for(int j=bid[x]-;j>=;--j)mins(f[x][j],f[x][j+]);
mb[bid[x]]=y;
}
while(m--){
int l=_(),r=_();
int L=bid[l],R=bid[r];ans=inf;
if(L==R)get(l,r);
else{
int pl=rs[L],pr=ls[R];
get(l,pl,pr,r);
if(R-L>){
mins(ans,bb[++L][--R]);
for(int i=l;i<=pl;++i)mins(ans,f[i][R]);
for(int i=pr;i<=r;++i)mins(ans,f[i][L]);
}
}
printf("%d\n",ans);
}
return ;
}

bzoj5052: 繁忙的财政官的更多相关文章

  1. CEO、COO、CFO、CTO

    CEO.COO.CFO.CTO是什么意思? 网站里的各种职位: CEO(Chief executive officer)首席执行官 类似总经理.总裁,是企业的法人代表. COO(Chief opera ...

  2. 转:CEO, CFO, CIO, CTO, CSO是什么

    转自:https://club.1688.com/threadview/26957122.html CEO, CFO, CIO, CTO, CSO是什么?(现在O太多了) 帖子创建时间:  2009年 ...

  3. IT业常见职位英语缩写全攻略及详解

    现在中国人流行起英文名字,连职位也跟着作秀,什么CEO.COO.CFO.CTO.CIO啦,那CEO.COO.CFO.CTO.CIO到底是什么意思呢?总被这些概念搞晕,这可不是搞IT的应该犯的错误哦,好 ...

  4. 如何成为出色的IT项目经理:成功的五个关键因素

    “出色”的IT 项目经理的定义不是一成不变的.随着经济和商业因素的改变,项目经理的角色进行调整以适应新的需求,迎接新的挑战. 除了一般的困惑之外,还有一种看法就是,在组织中,不同的人对于项目经理的看法 ...

  5. 马婕 2014年MBA,mpacc备考 报刊宣读1 中国的电子商务(转)

    http://blog.sina.com.cn/s/blog_3e66af4601015fxi.html 中国电子商务蓄势待发 Chinese e-commerce中国电子商务Pity the par ...

  6. Erlang epmd官方文档中文翻译

    本文含epmd简介及官方文档之翻译,文档地址 http://erlang.org/doc/man/epmd.html翻译时的版本 R19.1 中英文水平都不咋地,不通顺处海涵,就酱. 简介 Erlan ...

  7. Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数

    Mysql怎么判断繁忙,innodb的主要参数,checkpoint机制,show engine innodb status   2018年07月13日 15:45:36 anzhen0429 阅读数 ...

  8. hbase官方文档(转)

    FROM:http://www.just4e.com/hbase.html Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Soft ...

  9. HBase官方文档

    HBase官方文档 目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. ...

随机推荐

  1. Gym - 101002D:Programming Team (01分数规划+树上依赖背包)

    题意:给定一棵大小为N的点权树(si,pi),现在让你选敲好K个点,需要满足如果如果u被选了,那么fa[u]一定被选,现在要求他们的平均值(pi之和/si之和)最大. 思路:均值最大,显然需要01分数 ...

  2. jquery中on绑定click事件在苹果手机失效的问题

    因为是动态添加的内容,所以想要使用click事件,需要给他用on绑定一下: $(document).on("click",".next_button",func ...

  3. 动态规划-----hdu 1024 (区间连续和)

    给定一个长度为n的区间:求m段连续子区间的和 最大值(其中m段子区间互不相交) 思路: dp[i][j]: 前j个元素i个连续区间最大值 (重要 a[j]必须在最后一个区间内) 转移方程:dp[i][ ...

  4. python django day 4 database

    django-admin.py startproject learn_models # 新建一个项目 cd learn_models # 进入到该项目的文件夹 django-admin.py star ...

  5. (4)MySQL的外键(不同表之间的数据关联)

    问题:下列这张表中部门等列名下输入的数据没有约束,那么可以随便填写符合规则的数据但是不符合实际需求的值,这样就造成了不符合规则的数据在表中存在,外键就是为了解决这个问题,管理员可以在另一张表中设置好符 ...

  6. 【BZOJ2229】【ZJOI2011】最小割

    冷门知识点…… 原题: 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中 ...

  7. 【java编程】加密算法-对称加密及AES加密算法

    转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...

  8. shell-url-decode

    查询每个小时的clk ,然后获取对应的字段 #!/bin/bash urldecode(){ echo -e "$(sed 's/+/ /g;s/%\(..\)/\\x\1/g;')&quo ...

  9. 世界各个地区WIFI 2.4G及5G信道划分表(附无线通信频率分配表)

    参考:https://blog.csdn.net/dxpqxb/article/details/80969760 目前主流的无线WIFI网络设备802.11a/b/g/n/ac: 传统 802.11 ...

  10. MySQL--时间戳与时区问题

    对于使用 timestamp 的场景,MySQL 在访问 timestamp 字段时会做时区转换,当 time_zone 设置为 system 时,MySQL 访问每一行的 timestamp 字段时 ...