【问题描述】

【输入格式】

【输出格式】

【样例输入】

6 3
3 5
1 2
3 4
2 2
1 5
1 4

【样例输出】

2

【样例说明】

【更多样例】

下载

【样例 2 输入输出】

见目录下的 interval/interval2.in 与 interval/interval2.ans。

【样例 3 输入输出】

见目录下的 interval/interval3.in 与 interval/interval3.ans。

【子任务】

【来源】

NOI2016 Day2 T1

  这道题目,第一次做我没有做出来,当时以为好难,都对NOI都失去信心了。

  思路是这样的,先是一定要离散化,不然就不能处理了,接着按权值排序,用一种类似尺取法的方法去O(N)扫一遍,期间用O(logN)维护被覆盖最多次的位置被覆盖的次数。

  仔细想想还是可以感觉到这个尺取法是对的……

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define mid ((l+r)>>1)
using namespace std;
const int maxn=;
const int INF=;
int Mx[maxn<<],sum[maxn<<],ans=INF,n,m,N;
int la[maxn],lb[maxn],b[maxn],p[maxn],kl[maxn];
bool cmp(int a,int b){return kl[a]<kl[b];}
void Modify(int x,int l,int r,int a,int b,int v){
if(l>=a&&r<=b){Mx[x]+=v;sum[x]+=v;return;}
if(mid>=a)Modify(x<<,l,mid,a,b,v);
if(mid<b)Modify(x<<|,mid+,r,a,b,v);
Mx[x]=max(Mx[x<<],Mx[x<<|])+sum[x];
}
int main(){
freopen("interval.in","r",stdin);
freopen("interval.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;p[i]=i,i++){
scanf("%d%d",&la[i],&lb[i]);
b[++N]=la[i];b[++N]=lb[i];
kl[i]=lb[i]-la[i]+;
}
sort(p+,p+n+,cmp);sort(b+,b+N+);
N=unique(b+,b+N+)-b-;
for(int t=;t<=n;t++){int i=p[t];
la[i]=lower_bound(b+,b+N+,la[i])-b;
lb[i]=lower_bound(b+,b+N+,lb[i])-b;
}
for(int i=,j=;j<n||Mx[]==m&&j==n;){
while(Mx[]<m&&j<n)++j,Modify(,,N,la[p[j]],lb[p[j]],);
while(Mx[]==m&&i<=n)ans=min(ans,kl[p[j]]-kl[p[i]]),Modify(,,N,la[p[i]],lb[p[i]],-),i++;
}
if(ans==INF)ans=-;
printf("%d\n",ans);
return ;
}

数据结构(线段树):NOI 2016 区间的更多相关文章

  1. codeforces Good bye 2016 E 线段树维护dp区间合并

    codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...

  2. HDU 1754 I Hate It(线段树单点替换+区间最值)

    I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...

  3. HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)

    Fast Arrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  4. POJ 3468 A Simple Problem with Integers(线段树模板之区间增减更新 区间求和查询)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 140120 ...

  5. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  6. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  7. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  8. hdu 1166线段树 单点更新 区间求和

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. hdu2795(线段树单点更新&区间最值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要 ...

  10. hdu1754(线段树单点替换&区间最值模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 题意:中文题诶- 思路:线段树单点替换&区间最大值查询模板 代码: #include & ...

随机推荐

  1. Java(Android)线程池 总结

        JAVA的Executors源码:(可以看出底层都是通过ThreadPoolExecutor来具体设置的~) public static ExecutorService newCachedTh ...

  2. easyui 常用代码

    最近在公司制作内部使用数据管理网页,用到了easyui,使用过程中发现与jquery的写法有比较多不一样的地方,趁现在有空,先做个笔记. (这里主要说明的是combobox的用法,其他的像textbo ...

  3. Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /* * 另存为 */ @RequestMapping(" ...

  4. python 学习笔记(一)

    在Windows上安装Python 首先,从Python的官方网站www.python.org下载最新的2.7.9版本,地址是这个: http://www.python.org/ftp/python/ ...

  5. 上机实践 - - 一个例子了解C/C++中指针与数组的区别

    本例子来自于<剑指Offer>(P37) 解答如下: size1:20 data1是一个数组,sizeof(data1)是求数组大小. 这个数组包含5个整数,每个整数4个字节,共20字节. ...

  6. HTML5 文件域+FileReader 分段读取文件(四)

    一.分段读取txt文本 HTML: <div class="container"> <div class="panel panel-default&qu ...

  7. sid超过8个字符处理步骤

    服务端配置如下: [oracle@p3 admin]$ cat listener.ora # listener.ora Network Configuration File: /home/oracle ...

  8. oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断

    oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断 查询方式一: SELECT CASE WHEN (SELECT CAST(SUM(CASE ) THEN ...

  9. 【转】IOS 30多个iOS常用动画,带详细注释

    原文: http://blog.csdn.net/zhibudefeng/article/details/8691567 CoreAnimationEffect.h 文件 // CoreAnimati ...

  10. iOS菜鸟之苹果开发者账号的注册

    大家一起来讨论讨论苹果开发者账号的注册(主要是以公司的开发者账号为例),前段时间公司要求注册开发者账号,于是我就特地看了看相关的帖子.这里简单给大家总结一下具体的流程. 首先你要登陆这个网址,进去之后 ...