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 ...
随机推荐
- parsing XML document from class path resource
遇到问题:parsing XML document from class path resource [spring/resources] 解决方法:项目properties— source—remo ...
- ul、li模仿ios的TableView实现城市选择
最近项目一个接着一个,之前说的精创环的项目还没做完,今天说先把那个放一下,先做访客系统,销售会见客户之后可以对客户进行一个跟踪记录,原型图也给了,今日头条的频道自定义页面一样. 如果是在IOS上让我来 ...
- javascript 中加’var‘和不加'var'的区别,你真的懂吗?
没看之前千万别说我是标题党,这个问题真的有好多淫都不懂!!! 大家都看了很多文章,都说避免隐式声明全局变量,就是说声明变量前必须加'var',那加了'var'和不加'var'到底有啥区别呢? 先来看一 ...
- 欧几里德与扩展欧几里德算法 Extended Euclidean algorithm
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...
- SVN 修改log信息报错的解决方案
要实现允许修改log这个功能,只需要在hooks目录下增加一个名为:pre-revprop-change.bat的文件,重启svn即可.该文件内容为:------------------------- ...
- 转 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- Entity Framework在WCF中序列化的问题
问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...
- 炮兵阵地 POJ 1185
n*m P 和 M P可以放人 M不行 人不能相互打到 问最多可以放多少人 #include<stdio.h> #include<algorithm> #include< ...
- 100726A
迭代深搜,从最深的地方搜,然后一个数被搜过了,标记用过,以后不再访问 #include<iostream> #include<cstring> #include<map& ...
- 510C
510C 拓扑排序:将那些受影响的字母拓扑排序,其后的输出 #include<iostream> #include<cstdio> #include<vector> ...