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) ...
随机推荐
- BZOJ1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 645 Solved: 433 ...
- mapreduce引用第三方jar
要想让mapreduce程序引用第三方jar文件, 可以采用如下方式: 通过命令行参数传递jar文件, 如-libjars等; 直接在conf中设置, 如conf.set(“tmpjars”,*.ja ...
- ACM2075_A/B
#include<iostream> int main() { using namespace std; int i,j,count; cin>>count; while(co ...
- Django中的CSRF
CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...
- 「S-A-L-T-A」项目失败总结!
前言: 从2013年8月20日进入这个项目开始,到现在12月12日. 从项目详细设计开始,到现在连SI2阶段的疏通测试都没有完成! (现在,这个项目好像已经不需要我们再做下去了...) 项目失败原因总 ...
- ASP.NET中的文件上传大小限制的问题
一.文件大小限制的问题 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文 ...
- delphi TFontDialog
设置前先获得Memo的字体属性并设置给FontDialog 然后再设置MEMO的字体属性 //设置Memo的字体属性 procedure TForm1.mni_FontClick(Sender ...
- oracle恢复被覆盖的存储过程
假设你不小心覆盖了之前的存储过程,那得赶紧闪回,时长越长闪回的可能性越小.原理非常easy,存储过程的定义就是数据字典,改动数据字典跟改动普通表的数据没有差别,此时会把改动前的内容放到undo中,我们 ...
- js获取键盘的keyCode-------Day42
济南今天是大雨倾盆啊,这闷热一扫而空,只是有些电闪雷鸣的,原想在公司里就完毕今天的博客记录的,只是不知道为什么怎么也登不上博客,预计是CSDN当时的server出问题了吧,好在到了晚上,这雷声小了也少 ...
- 生成 git 密钥 步骤
http://blog.csdn.net/wfdtxz/article/details/8678982 git使用https协议,每次pull, push都要输入密码,相当的烦.使用git协议,然后使 ...