BZOJ4653: [Noi2016]区间
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]区间的更多相关文章
- [BZOJ4653][NOI2016]区间 贪心+线段树
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...
- BZOJ4653 [NOI2016] 区间 【线段树】
题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...
- 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)
传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...
- BZOJ4653:[NOI2016]区间(线段树)
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- BZOJ4653 [NOI2016]区间 [线段树,离散化]
题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...
- 题解【bzoj4653 [NOI2016] 区间】
先按照长度排个序,然后依次添加区间.什么是添加?设这个区间是\([l,r]\),添加就是把\(a_l,a_{l+1},a_{l+2},{...},a_{r}\)都加上\(1\),其中\(a_i\)表示 ...
- BZOJ4653: [Noi2016]区间(线段树 双指针)
题意 题目链接 Sol 按照dls的说法,一般这一类的题有两种思路,一种是枚举一个点\(M\),然后check它能否成为答案.但是对于此题来说好像不好搞 另一种思路是枚举最小的区间长度是多少,这样我们 ...
- 【BZOJ4653】[Noi2016]区间 双指针法+线段树
[BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...
- 【BZOJ-4653】区间 线段树 + 排序 + 离散化
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 107 Solved: 70[Submit][Status][Di ...
随机推荐
- ASP.NET MVC3入门教程之第一个WEB应用程序
本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=91&extra=page%3D1 上一节,我们已经搭建好了AS ...
- java swing模仿随机频谱
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Grap ...
- Webmin|Linux管理员远程管理工具
介绍: Webmin is a web-based interface for system administration for Unix. Using any modern web browser ...
- SharePoint 读取 Site Columns 的数据并绑定到DropdownList
public void GetSiteColumns(DropDownList ddl, String siteColumn) { var fields = new SPSite(ProjectCon ...
- HIbernate的增删改
数据库是oracle 以一对多为例:user50一的一方 order50是多的一方 首先是实体类: 这里的实体是双向关系,既通过user50可以找到order50,通过order50可以找到 ...
- CSS hack技术
首先我们要了解一个概念CSS hack 不同浏览器,比如IE6.IE7.IE8,Mozilla Firefox等,对CSS的支持及解析结果不同,因此会导致相同的网页生成的页面效果不一样. 这个时候我们 ...
- [转]jquery 点击表格变为input可以修改无刷新更新数据
原文地址:http://www.freejs.net/article_biaodan_43.html 之前已经发了2篇类似的文章<点击变td为input更新>和<jquery表格可编 ...
- Jquery-下拉列表设置默认选择
$('#select option:eq(2)').attr('selected','selected');
- Windows上python的virtualenv 安装及使用
源地址:http://blog.csdn.net/liuchunming033/article/details/46008301 VirtualEnv可以方便的解决不同项目对类库的依赖问题. 现实测试 ...
- Linux下eclipse提示快捷键失效解决办法
在window->Preferences->general->keys中, 找到 content asist 修改下边值 Binding 改成 Alt+/ When 改为 Editi ...