一道很巧妙的题。

首先我们需要解决的问题,怎么快速判断选出的m个区间是否存在交。

我们反过来考虑这个问题,

我们每一个选出的区间,就对应的在线段树上区间加1,那么只要存在最大值等于m,就一定有m个区间满足条件了。

那么把区间从小到大排序,一直加到最大值等于m,更新答案,然后删掉最小区间,不停的做下去就好了。

#include <bits/stdc++.h>
#define lson p<<1
#define rson (p<<1)|1
using namespace std;
inline int gi () {int x=0, w=0; char ch=0;while (! (ch>='0' && ch<='9') ) {if (ch=='-') w=1;ch=getchar ();}while (ch>='0' && ch<='9') {x= (x<<3) + (x<<1) +  (ch^48);ch=getchar ();}return w?-x:x;
}const int N=5e5+10;
int n,m,head=1,Ans=0x3f3f3f3f,Num,Ls[N<<1],LS[N<<1],Cnt[N<<3],Tag[N<<3];struct Sect {int l, r, val;
}s[N];
bool Cmp (Sect a, Sect b) {return a.val<b.val;
}void Pushup (int p) {Cnt[p]=max (Cnt[lson], Cnt[rson]);
}void Pushdown (int p) {if (!Tag[p]) return;Tag[lson]+=Tag[p];Tag[rson]+=Tag[p];Cnt[lson]+=Tag[p];Cnt[rson]+=Tag[p];Tag[p]=0;
}void Modify (int p, int l, int r, int Ml, int Mr, int val) {if (l>=Ml && Mr>=r) {Cnt[p]+=val;Tag[p]+=val;return;}Pushdown (p);int Mid= (l+r) >> 1;if (Ml<=Mid) Modify (lson, l, Mid, Ml, Mr, val);if (Mr>Mid) Modify (rson, Mid+1, r, Ml, Mr, val);Pushup (p);
}int main ()
{n=gi (), m=gi ();memset (Ls, -1, sizeof (Ls) );memset (LS, -1, sizeof (LS) );for (int i=1;i<=n;++i) {s[i].l=gi (), s[i].r=gi ();s[i].val=s[i].r-s[i].l;Ls[++Num]=s[i].l, Ls[++Num]=s[i].r;}sort (Ls+1, Ls+Num+1);for (int i=1, j=0;i<=Num;++i) {if (Ls[i]!=Ls[i-1]) LS[++j]=Ls[i];if (i==Num) {Num=j;break;}}for (int i=1;i<=n;++i) {s[i].l=lower_bound (LS+1, LS+Num+1, s[i].l) -LS;s[i].r=lower_bound (LS+1, LS+Num+1, s[i].r) -LS;}    sort (s+1, s+n+1, Cmp);for (int i=1;i<=n;++i) {Modify (1, 1, Num, s[i].l, s[i].r, 1);            while (Cnt[1]==m) {Ans=min (Ans, s[i].val-s[head].val);Modify (1, 1, Num, s[head].l, s[head].r, -1);head++;}}printf ("%d\n", Ans==0x3f3f3f3f?-1:Ans);return 0;
}

BY BHLLX

转载于:https://www.cnblogs.com/Bhllx/p/9930296.html

[NOI2016]区间-线段树相关推荐

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

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

  2. 51NOD 1631 小鲨鱼在51nod小学 区间线段树

    1631 小鲨鱼在51nod小学 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依 ...

  3. 牛客 - 骚区间(线段树+思维)

    题目链接:点击查看 题目大意:给出一个 1 ~ n 的排列 a ,现在规定骚区间当且仅当 a[ l ] 是 [ l , r ] 这段区间内的次小值,同时 a[ r ] 是 [ l , r ] 这段区间 ...

  4. 等差区间 线段树+GCD

    Description 已知一个长度为 nn 的数组 a[1],a[2],-,a[n]a[1],a[2],-,a[n],我们进行 qq 次询问,每次询问区间 a[l],a[l+1],-,a[r−1], ...

  5. 【bzoj3065】: 带插入区间K小值 详解——替罪羊套函数式线段树

    不得不说,做过最爽的树套树---- 由于有了区间操作,我们很容易把区间看成一棵平衡树,对他进行插入,那么外面一层就是平衡树了,这就与我们之前所见到的不同了.我们之前所见到的大多数是线段树套平衡树而此题 ...

  6. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  7. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2271  Solved: 935 [Submit][St ...

  8. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

  9. 【BZOJ3295】动态逆序对,CDQ分治/BIT套权值线段树

    传送门 思路: 用来练习cdq的题目 断断续续纠结了2天 因为loli一直在考试 最后莫名乱搞了一发就A了? 实际上是考虑每一次修改对答案的贡献,即位置在1~x-1且大于x的数以及位置在x+1~n且小 ...

最新文章

  1. Apollo 你了解下这些内容就完美了
  2. GitHub 官方终于出 App 了!
  3. H - Cow Contest POJ - 3660(Floyd 传递闭包)
  4. 马斯克突然抢购7千多万股推特,狂撒30亿一夜成最大股东,今日发推“大笑”...
  5. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
  6. 12种主要的Dropout方法:如何应用于DNNs,CNNs,RNNs中的数学和可视化解释
  7. iPhone 13系列或将涨价?业内人士:可能性不大,原因有这几点
  8. Cap22_信息系统安全管理
  9. 如何将两个php超链接,php超链接跳转
  10. [BZOJ 1212][HNOI2004]L语言(AC自动机)
  11. linux怎么查看hwaddr_linux下如何查看某个网卡当前使用的IP
  12. Java堆:Shallow Size和Retained Size
  13. vue自定义步骤行程条
  14. Auto.js 9版本 OCR 文字识别
  15. 基金申请:关键科学问题,不是科学问题
  16. php投影,ppt投影怎么显示备注
  17. 2023电工杯数学建模B题思路模型
  18. Oracle数据库实验四查询实验三(Oracle 11g)
  19. JOL探索synchronized锁-子路老师
  20. Python从入门到实践:打包和解包(*和**)的使用

热门文章

  1. UIColor的封装
  2. Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
  3. 中小企业实施ERP更多是需要发展的眼光与坚定的决策
  4. C# 制作外挂常用的API
  5. iOS培训教程——创建第一级控制器
  6. Ril分析三——客户端请求和响应处理与modem交互
  7. LeetCode OJ -- Binary Tree Paths
  8. Java实现ANN神经网络之BP代码参考
  9. tensorflow sobel算子实现
  10. Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name 解决