UOJ222 NOI2016 区间 线段树+FIFO队列
首先将区间按长度排序后离散化端点(这里的“长度”指的是离散化之前区间的实际长度)
然后模拟一个队列,区间按排好的顺序依次进入,直到某个点被覆盖了M次。之后依次出队,直到所有点都被覆盖小于M次
修改和询问覆盖次数可以用线段树实现
//C++11 code #include <cstdio> #include <cstring> #include <algorithm> ; const int inf=0x7f7f7f7f; struct Range { int left,right; int len; void assign(int l,int r) { left=l; right=r; len=r-l; } }; struct SegTree { struct Node { ; //max-val ; int total() { return val+tag; } }; Node node[maxN<<]; int size; int _val; void update(int cur,int right) { node[cur].val = std::max(node[cur+].total(),node[right].total()); } void add(int L,int R,int val) { _val=val; __add(,L,R+,,size); } void __add(int cur,int rL,int rR,int nL,int nR) { if(rL<=nL && rR>=nR) { node[cur].tag+=_val; return; } ; ); ,rL,rR,nL,mid); if(rR>mid) __add(right,rL,rR,mid,nR); update(cur,right); } ].total(); } }; Range rg[maxN]; SegTree segt; int N,M; ]; int valNum; void input() { scanf("%d%d",&N,&M); int tl,tr; ;i<N;i++) { scanf("%d%d",&tl,&tr); buf[i<<]=tl; buf[(i<<)+]=tr; rg[i].assign(tl,tr); } } void discretize() { std::sort(buf,buf+(N<<)); valNum=std::unique(buf,buf+(N<<))-buf; ;i<N;i++) { rg[i].left=std::lower_bound(buf,buf+valNum,rg[i].left)-buf; rg[i].right=std::lower_bound(buf,buf+valNum,rg[i].right)-buf; } } int solve() { int res=inf; auto cmpIdx=[](const Range& A,const Range& B)->bool { return A.len<B.len; }; std::sort(rg,rg+N,cmpIdx); discretize(); segt.size=valNum; ,tail=-; ) { while((++head)<N && segt.askAll()<M) segt.add(rg[head].left,rg[head].right,); if(segt.askAll()<M) break; else --head; while(segt.askAll()==M) { ++tail; res=std::min(res,rg[head].len-rg[tail].len); segt.add(rg[tail].left,rg[tail].right,-); } } :res; } int main() { input(); printf("%d\n",solve()); ; }
UOJ222 NOI2016 区间 线段树+FIFO队列的更多相关文章
- BZOJ.4653.[NOI2016]区间(线段树)
BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...
- [NOI2016]区间 线段树
[NOI2016]区间 LG传送门 考虑到这题的代价是最长边减最短边,可以先把边按长度排个序,双指针维护一个尺取的过程,如果存在包含某个点的区间数\(\ge m\),就更新答案并把左指针右移,这样做的 ...
- Luogu P1712 [NOI2016]区间(线段树)
P1712 [NOI2016]区间 题意 题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间, ...
- BZOJ4653 [NOI2016]区间 [线段树,离散化]
题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...
- BZOJ4653: [Noi2016]区间(线段树 双指针)
题意 题目链接 Sol 按照dls的说法,一般这一类的题有两种思路,一种是枚举一个点\(M\),然后check它能否成为答案.但是对于此题来说好像不好搞 另一种思路是枚举最小的区间长度是多少,这样我们 ...
- 洛谷$P1712\ [NOI2016]$区间 线段树
正解:线段树 解题报告: 传送门$QwQ$ $umm$很久以前做的了来补个题解$QwQ$ 考虑给每个区间按权值($r-l$从大往小排序,依次加入,然后考虑如果有一个位置被覆盖次数等于$m$了就可以把权 ...
- BZOJ4653:[NOI2016]区间(线段树)
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 45 Solved: 30[Submit][Status][Discuss] D ...
- hdu 1540 Tunnel Warfare (区间线段树(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...
随机推荐
- WIA设备批量扫描
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 用Delphi7开发Web Service程序 转
转:http://rosehacker.blog.51cto.com/2528968/450160 用Delphi7开发Web Service程序,并把服务程序放在IIS Web服务器上提供给 ...
- 【狼】unity3d collision获取碰撞的点的位置
void OnCollisionEnter(Collision ctl) { ContactPoint contact = ctl.contacts[]; Quaternion rot = Quate ...
- IE浏览器兼容性的痛苦
做了一个弹出框的demo,在狐火,chrome,IE11中运行得好好的. 但是在IE8中死活不显示对话框,感觉IE8根本没有执行下面的javascript代码. 甚至,我简单的写alert(123), ...
- udev:renamed network interface eth0 to eth1
删除/etc/udev/rules.d/70-persistent-net.rules这个文件,重启
- Service的两种启动方法
刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...
- 解决IE6,IE7不能隐藏绝对定位溢出的内容
令人蛋疼的IE,IE6/IE7下父元素有相对/绝对定位时,子元素在IE6和IE7下overflow:hidden;失效. 情况一:(在parent上增加position:relative) <s ...
- 在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT) ORA-00922: missing or invalid option
在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT) ORA-00922: missing or invalid option hostdr:[/ho ...
- db4o官方停止支持及面向对象数据库的一些感想
前一段时间试用了db4o,真心认为不错.但自己在国内搜索了一下,并没有找到不论什么一个专门的论坛和面向对象的数据库产品.深感这东西在国内并没有太普及. 但自己试用认为这个东东真心不错(当然也有自己的优 ...
- 高仿优酷Android客户端图片左右滑动(自动切换)
本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能 ...