http://codeforces.com/problemset/problem/765/F (题目链接)

题意

  给出$n$个数的序列,$m$次询问,每次查询区间$[l,r]$之间相差最小的两个数的差。

Solution

  迷,右转题解→_→:jump

  奇怪的线段树

细节

  不造

代码

// codeforces 765F
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std; const int maxn=300010;
int n,Q,ans,a[maxn],res[maxn];
struct data {int l,r,id;}q[maxn];
struct node {int l,r,s;vector<int> v;}tr[maxn<<2]; bool cmp(data a,data b) {return a.r<b.r;}
void build(int k,int s,int t) {
tr[k].l=s;tr[k].r=t;tr[k].s=inf;
if (s==t) {tr[k].v.push_back(a[s]);return;}
int mid=(s+t)>>1;
build(k<<1,s,mid);build(k<<1|1,mid+1,t);
int i=0,j=0,ll=tr[k<<1].v.size(),rr=tr[k<<1|1].v.size();
while (i<ll || j<rr) {
if ((i<ll && tr[k<<1].v[i]<tr[k<<1|1].v[j]) || j==rr)
tr[k].v.push_back(tr[k<<1].v[i++]);
else tr[k].v.push_back(tr[k<<1|1].v[j++]);
}
for (int i=1;i<=t-s;i++) tr[k].s=min(tr[k].s,tr[k].v[i]-tr[k].v[i-1]);
}
int query(int k,int s,int t) {
int l=tr[k].l,r=tr[k].r,mid=(l+r)>>1;
if (l==s && r==t) return tr[k].s;
if (t<=mid) return query(k<<1,s,t);
else if (s>mid) return query(k<<1|1,s,t);
else return min(query(k<<1,s,mid),query(k<<1|1,mid+1,t));
}
void modify(int k,int p,int val) {
int l=tr[k].l,r=tr[k].r,mid=(l+r)>>1;
if (l==r) {tr[k].s=min(tr[k].s,abs(val-tr[k].v[0]));ans=min(ans,tr[k].s);return;}
vector<int>::iterator t=lower_bound(tr[k].v.begin(),tr[k].v.end(),val);
if (t==tr[k].v.end() || *t-val>=ans)
if (t==tr[k].v.begin() || val-*--t>=ans) {ans=min(ans,tr[k].s);return;}
if (p<=mid) modify(k<<1,p,val);
else modify(k<<1|1,p,val),modify(k<<1,p,val);
tr[k].s=min(tr[k].s,min(tr[k<<1].s,tr[k<<1|1].s));
}
int main() {
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&Q);
for (int i=1;i<=Q;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
sort(q+1,q+1+Q,cmp);
build(1,1,n);
int p=1;
for (int i=1;i<=Q;i++) {
while (p<q[i].r) ans=inf,modify(1,p,a[p+1]),p++;
res[q[i].id]=query(1,q[i].l,q[i].r);
}
for (int i=1;i<=Q;i++) printf("%d\n",res[i]);
return 0;
}

【codeforces 765F】 Souvenirs的更多相关文章

  1. 【codeforces 765F】Souvenirs

    Description Artsem is on vacation and wants to buy souvenirs for his two teammates. There are n souv ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  4. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  5. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  6. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  7. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  8. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  9. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

随机推荐

  1. [笔试]CVTE 2019提前批 Windows应用开发笔试

    不定项选择(x20) 数据结构 以abcdefg的顺序入栈,不可能出现的出栈顺序 一棵二叉树给出中序遍历和后序遍历结果,求左子树的节点数 操作系统 Linux中用什么指令可以找到文件中所有以" ...

  2. tf导出pb文件,以及如何使用pb文件

    先罗列出来代码,有时间再解释 from tensorflow.python.framework import graph_util import tensorflow as tf def export ...

  3. notion笔记

    不错的笔记应用, 模式新颖, 正在使用, 如有相同使用者可以入群交流 notion QQ群 725638123

  4. fdisk命令详解

    基础命令学习目录 原文链接:https://www.cnblogs.com/xiaofengkang/archive/2011/06/06/2073579.html fdisk -l 可以列出所有的分 ...

  5. python 原生态调用server服务————SimpleHTTPServer

    python 原生态调用server服务,接收http传递的参数并且处理返回结果 很多blog中都是抄了官网的,没有说明参数如何接收 1.代码中提供了post与get两种方式来发起请求,但是传递参数时 ...

  6. python处理数据pandas视频资料

    python强大数据处理工具pandas视频资料:https://pan.baidu.com/s/17VRd1cgFaKi20drfCgZ8Gg

  7. 欢迎来怼--第三十六次Scrum会议

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/1 11:35~11:55,总计20min. 地点 ...

  8. MathExam第二次作业

    第二次作业:MathExam 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 30 • ...

  9. [2017BUAA软工]结对项目:数独扩展

    结对项目:数独扩展 1. Github项目地址 https://github.com/Slontia/Sudoku2 2. PSP估计表格 3. 关于Information Hiding, Inter ...

  10. Class 2 四则运算2的设计思路

    设计思路 1.主函数中有一个大的for循环,用户可以一直随机得到相应题目.在嵌套一个循环,其可以直接确定题目数量:定义两个变量,分别作为四则运算的两个运算数,用随机数函数得到两个数值:再利用随机生成函 ...