https://www.lydsy.com/JudgeOnline/problem.php?id=4653

https://www.luogu.org/problemnew/show/P1712

http://uoj.ac/problem/222

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

对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−li,即等于它的右端点的值减去左端点的值。
求所有合法方案中最小的花费。如果不存在合法的方案,输出 −1。

(天哪我终于会做套路题了……虽然对于判断是否合法的时候没想到线段树……)

看复杂度是O(nlogn)猜想可能又是枚举左端点找右端点的套路。

然而相比于一个点被覆盖m次,更难处理的是这个答案的运算。

于是我们将区间按照权值排序,接着就是两个指针不断扩大,当合法的时候更新一下答案就行了。

那么如何维护一个点被最多被覆盖了多少次呢?线段树呗。

注意空间不要开小了-=-

#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int INF=2e9;
const int N=5e5+5;
inline int read(){int X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
struct range{int l,r,w;
}g[N];
int n,m,lim,b[2*N],tr[8*N],lz[8*N];
inline bool cmp(range a,range b){return a.w<b.w;
}
inline void LSH(){sort(b+1,b+lim+1);lim=unique(b+1,b+lim+1)-b-1;for(int i=1;i<=n;i++){g[i].l=lower_bound(b+1,b+lim+1,g[i].l)-b;g[i].r=lower_bound(b+1,b+lim+1,g[i].r)-b;}
}
inline void push(int a){if(!lz[a])return;lz[a<<1]+=lz[a];lz[a<<1|1]+=lz[a];tr[a<<1]+=lz[a];tr[a<<1|1]+=lz[a];lz[a]=0;
}
void insert(int a,int l,int r,int l1,int r1,int w){if(r<l1||r1<l)return;if(l1<=l&&r<=r1){tr[a]+=w;lz[a]+=w;return;}push(a);int mid=(l+r)>>1;insert(a<<1,l,mid,l1,r1,w);insert(a<<1|1,mid+1,r,l1,r1,w);tr[a]=max(tr[a<<1],tr[a<<1|1]);
}
int main(){n=read(),m=read();for(int i=1;i<=n;i++){g[i].l=b[++lim]=read();g[i].r=b[++lim]=read();g[i].w=g[i].r-g[i].l;}LSH();sort(g+1,g+n+1,cmp);int l=1,ans=INF;for(int l=1,r=0;l<=n;l++){while(r<n&&tr[1]<m){r++;insert(1,1,lim,g[r].l,g[r].r,1);}if(tr[1]>=m)ans=min(ans,g[r].w-g[l].w);insert(1,1,lim,g[l].l,g[l].r,-1);}printf("%d\n",ans==INF?-1:ans);return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9132055.html

BZOJ4653 洛谷1712 UOJ222:[NOI2016]区间——题解相关推荐

  1. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  2. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

  3. 洛谷P4113 [HEOI2012]采花 题解

    洛谷P4113 [HEOI2012]采花 题解 题目链接:P4113 [HEOI2012]采花 题意:萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园 ...

  4. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  5. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  6. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  7. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  8. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  9. 洛谷 P2015 二叉苹果树 题解

    洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...

最新文章

  1. 10.2.2移动产品离线功能等具体解释----暨4月8日移动《在离线一体化》公开课Qamp;A...
  2. [译]开始学习webpack
  3. php 删除单个文件大小,php删除指定大小的jpg文件
  4. 执行计划 分析一条sql语句的效率 mysql_MySQL中一条SQL语句的执行过程
  5. 为什么现在的手机价格越来越高,最后一条真相了...
  6. 【转】Xcelsius2008 水晶易表问题 部分汇总
  7. nginx 禁止运行php,Nginx、Apache、Lighttpd禁止目录执行php配置示例
  8. java new 关键字到底做了什么?
  9. 3Dmax界面及快捷键介绍
  10. 等级保护2.0的变化
  11. 点控技术和激光定位技术
  12. rxjs ajax query,rxjs入门之ajax封装
  13. 【AcWing19】【LeetCode】DFS - 46/47/39/77/78/216/17/131/93/90/491
  14. 【Rust日报】2022-07-20 极简主义 Poem 指南
  15. 基于K210与STM32的人脸识别门禁 实现掉地仓储,人体雷达检测
  16. 2018年就要过去了
  17. LVS负载均衡DR模式安装和配置过程详解
  18. 批量将一个 PPT 幻灯片文件按固定页数拆分成多个幻灯片文件
  19. 求解答 关于种子网站上的代码
  20. 链路层--->ETH(以太网)协议

热门文章

  1. 样条之连分式插值函数
  2. ArcSDE建Table在ArcCatalog中不可见
  3. FreeBSD和Linux如何互相访问文件系统
  4. java 代码性能优化_Java代码性能优化(四)
  5. Caffe + windows + python3.5安装
  6. strlen() sizeof()
  7. 技术博客(初用markdown)。
  8. jdk的一条命令查看运行参数
  9. ReactiveCocoa初步
  10. C#动态属性(.NET Framework4.5支持)