传送门

UOJ上卡掉一个点,COGS上卡掉两个点..弃疗,不改了,反正BZOJ上过啦hhh

先把区间按长度递增排序。然后每次用线段树维护区间最大覆盖次数,用一个指针随便扫扫就行了。

 //NOI 2016 D2T1
 //by Cydiater
 //2016.9.18
 #pragma GCC optimize("O2")
 #include <iostream>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
 #include <string>
 #include <algorithm>
 #include <queue>
 #include <map>
 #include <ctime>
 #include <cmath>
 #include <iomanip>
 using namespace std;
 #define ll long long
 #define up(i,j,n)        for(INT i=j;i<=n;i++)
 #define down(i,j,n)        for(INT i=j;i>=n;i--)
 #define FILE "interval"
 #define INT unsigned int
 ;
 const INT oo=0x3f3f3f3f;
 map<INT,INT> lable;
 inline INT read(){
     ,f=;
     ;ch=getchar();}
     +ch-';ch=getchar();}
     return x*f;
 }
 INT num[MAXN],N,M,top=,cnt=,check=,x,y,v,ans=oo;
 struct Query{
     INT st,nd,len;
 }q[MAXN];
 struct Tree{
     INT maxx,delta;
 }t[MAXN<<];
 namespace solution{
     inline bool cmp(Query a,Query b){return a.len<b.len;}
     inline void downit(INT node){
         )return;
         t[node<<].delta+=t[node].delta;t[node<<|].delta+=t[node].delta;
         t[node<<].maxx+=t[node].delta;t[node<<|].maxx+=t[node].delta;
         t[node].delta=;
     }
     inline ].maxx,t[node<<|].maxx);}
     void updata(INT leftt,INT rightt,INT root){
         downit(root);
         if(leftt>y||rightt<x)        return;
         if(leftt>=x&&rightt<=y){
             t[root].maxx+=v;
             t[root].delta+=v;
             return;
         }
         INT mid=(leftt+rightt)>>;
         updata(leftt,mid,root<<);
         updata(mid+,rightt,root<<|);
         reload(root);
     }
     void init(){
         N=read();M=read();
         up(i,,N){
             q[i].st=read();q[i].nd=read();
             num[++top]=q[i].st;num[++top]=q[i].nd;
         }
         sort(num+,num+top+);
         up(i,,top)if(!lable[num[i]])lable[num[i]]=++cnt;
         up(i,,N){
             q[i].len=q[i].nd-q[i].st;
             q[i].st=lable[q[i].st];
             q[i].nd=lable[q[i].nd];
         }
         sort(q+,q+N+,cmp);
     }
     void slove(){
         up(i,,N){
             ].maxx<M&&check<N){
                 check++;
                 x=q[check].st;y=q[check].nd;v=;
                 updata(,cnt,);
             }
             ].maxx>=M)ans=min(ans,q[check].len-q[i].len);
             x=q[i].st;y=q[i].nd;v=-;
             updata(,cnt,);
         }
     }
     void output(){
         if(ans==oo)puts("-1");
         else cout<<ans<<endl;
     }
 }
 int main(){
     //freopen(FILE".in","r",stdin);
     //freopen(FILE".out","w",stdout);
     //freopen("input.in","r",stdin);
     using namespace solution;
     init();
     slove();
     output();
     ;
 }

BZOJ4653: [Noi2016]区间的更多相关文章

  1. [BZOJ4653][NOI2016]区间 贪心+线段树

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...

  2. BZOJ4653 [NOI2016] 区间 【线段树】

    题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...

  3. 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)

    传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...

  4. BZOJ4653:[NOI2016]区间(线段树)

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...

  5. BZOJ4653 [NOI2016]区间 [线段树,离散化]

    题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...

  6. 题解【bzoj4653 [NOI2016] 区间】

    先按照长度排个序,然后依次添加区间.什么是添加?设这个区间是\([l,r]\),添加就是把\(a_l,a_{l+1},a_{l+2},{...},a_{r}\)都加上\(1\),其中\(a_i\)表示 ...

  7. BZOJ4653: [Noi2016]区间(线段树 双指针)

    题意 题目链接 Sol 按照dls的说法,一般这一类的题有两种思路,一种是枚举一个点\(M\),然后check它能否成为答案.但是对于此题来说好像不好搞 另一种思路是枚举最小的区间长度是多少,这样我们 ...

  8. 【BZOJ4653】[Noi2016]区间 双指针法+线段树

    [BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...

  9. 【BZOJ-4653】区间 线段树 + 排序 + 离散化

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 107  Solved: 70[Submit][Status][Di ...

随机推荐

  1. JQuery功能查询页

    JQuery在前端开发中已经是常用的不能再常用的库了.最近的项目中使用到了JQuery,我第一次接触它的时候为了学习,把常用的操作指令用比较小的字体写在一页word上,打印出来贴在桌子上,用来让自己时 ...

  2. SQL中的内连接与外连接

    关于关系代数连接运算的介绍请查看下面链接 http://www.cnblogs.com/xidongyu/articles/5980407.html 连接运算格式 链接运算由两部分构成:连接类型和连接 ...

  3. 【Python】[函数] 调用与定义

    1.数据类型转换 int(),float(),str(),bool('1')2.定义函数使用 def关键字,依次写出 函数名.括号.括号中的参数.冒号,然后在缩进体中写函数内容 例子 求绝对值的函数 ...

  4. webpack 插件: html-webpack-plugin

    插件地址:https://www.npmjs.com/package/html-webpack-plugin 这个插件用来简化创建服务于 webpack bundle 的 HTML 文件,尤其是对于在 ...

  5. 把时间转成适合符合日常习惯的格式【js】

    假设现在是7月30日12点,我们可以说今天12点,意思也非常明确. 我们习惯说昨天12点,而不习惯说29号12点. 我们习惯说周一12点,而不习惯说28号12点,这样不用翻日历看今天是几号. so,上 ...

  6. 开发错误记录11:git报错 fatal:open /dev/null or dup failed: No such file or directory

    今天在自己的的电脑上装了git,没成想运行报错: 重装了几次git ,都不行,电脑上没有装github桌面版; 后来在网上查到了方法,反映这是系统的问题: null是比较特殊的系统文件,它实际上是为操 ...

  7. [Google Guava]学习--新集合类型Multimap

    每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两 ...

  8. 【BZOJ 4515】【SDOI 2016 Round1 Day1 T3】游戏

    考场上写了lct,可惜当时对标记永久化的理解并不是十分深刻,导致调一个错误的程序调了4h+,最后这道题爆0了QwQ 现在写了树链剖分,用标记永久化的线段树维护轻重链,对于$s\rightarrow l ...

  9. 【CodeVS 1993】草地排水 isap模板题

    开始网络流的学习,更新一下isap的模板 #include<cstdio> #include<cstring> #include<algorithm> #defin ...

  10. javaweb学习总结(四十二)——Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...