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

分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. P1005 矩阵取数游戏(动态规划+高精度)

    题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...

  2. PTA——四舍五入

    PTA 7-18 出租车计价 (15 分) #include<stdio.h> int main() { double s,w; int t; scanf("%lf %d&quo ...

  3. 2018.4.3 配置AD服务器步骤

    net ads命令表 配置AD服务器步骤:1. 安装rpm依赖包yum -y install pam_krb5* krb5-libs* krb5-workstation* krb5-devel* kr ...

  4. XML映射配置文件

    XML映射配置文件 http://www.mybatis.org/mybatis-3/configuration.html Type Handlers 类型处理器 每当MyBatis在Prepared ...

  5. python time模块使用笔记(更新)

    import time 添加time模块 关于时间和时间戳: 时间是指日常生活中用的,如某年某月某日 时间戳是一个时间长度,是时间关于一个初始时间(好像是1970.1.1)的秒数 localtime方 ...

  6. LA3641 Leonardo's Notebook

    题意 PDF 分析 给出一个26个大写字母的置换B,是否存在A^2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A^ ...

  7. MySQL Replication--跳过复制错误

    在MySQL中,有两种跳过复制错误的方法:1.对于未使用GTID的复制,可以使用sql_slave_skip_counter来跳过错误2.对于使用GTID的复制,可以使用GTID_NEXT模拟空事务来 ...

  8. react-static 基于react 渐进式静态站点生成框架

    react-static 是一个不错的基于react 开发的静态站点生成框架,可以用来替代create-react-app 包含的特性 100% react 很快的构建以及性能 自动代码以及数据分离 ...

  9. sqler sql 转rest api redis 接口使用

    sqler 支持redis 协议,我们可以用过redis client 连接sqler,他会将宏住转换为redis command 实现上看源码我们发现是基于一个开源的redis 协议的golang ...

  10. Gravitee.io 架构

    Gravitee.io 官方文档提供了几张架构图,通过图我们可以有一个整体的认识. 全局架构 平台架构 参考资料 https://docs.gravitee.io/apim_overview_arch ...