luogu1712 区间 (尺取法+线段树)
先把区间按照长度从小到大排序,然后用尺取法来做
大概就是先一点一点把区间算上 直到某个点被覆盖了m次,然后一点一点把最前面的区间扔掉,直到没有点被覆盖m次,这样反复做(相当于是它选择的区间左右端点在那里摩擦)
判断有没有点被覆盖m次可以用线段树来做
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=; inline int read(){
char c=getchar();int a=;
while(c<''||c>'') c=getchar();
while(c>=''&&c<=''){a=a*+c-'';c=getchar();}
return a;
} struct ST{
int x,id;bool isl;
}nd[maxn*];
struct Line{
int l,r,siz;
}ln[maxn];
struct Node{
int l,r,num,laz;
}tr[maxn*]; int M,N; inline bool cmp1(ST a,ST b){return a.x<b.x;}
inline bool cmp2(Line a,Line b){return a.siz<b.siz;} void build(int i,int l,int r){
tr[i].l=l;tr[i].r=r;tr[i].num=tr[i].laz=;
if(l>=r) return;
int m=(l+r)>>;build(i<<,l,m);build(+(i<<),m+,r);
} inline void pushdown(int i){
if(!tr[i].laz) return;
if(tr[i].l==tr[i].r){tr[i].laz=;return;}
int l=i<<,r=(i<<)+;
tr[l].num+=tr[i].laz;tr[r].num+=tr[i].laz;
tr[l].laz+=tr[i].laz;tr[r].laz+=tr[i].laz;
tr[i].laz=;return;
}
inline void update(int i){if(tr[i].l<tr[i].r)tr[i].num=max(tr[i<<].num,tr[(i<<)+].num);} void add(int i,int l,int r,int x){
if(tr[i].l==l&&tr[i].r==r){tr[i].num+=x;tr[i].laz+=x;return;}
int m=(tr[i].l+tr[i].r)>>;pushdown(i);
if(l<=m) add(i<<,l,min(m,r),x);
if(r>m) add((i<<)+,max(l,m+),r,x);
update(i);
} int main(){
int i,j,k,ans=0x7fffffff;
N=read();M=read();
for(i=;i<=N;i++){
ln[i].l=read();ln[i].r=read();ln[i].siz=ln[i].r-ln[i].l;
nd[i].x=ln[i].l;nd[i].id=i;nd[i].isl=;
nd[i+N].x=ln[i].r;nd[i+N].id=i;nd[i+N].isl=;
}sort(nd+,nd+N*+,cmp1);
for(i=,j=;i<=N*;i++){
if(nd[i].x!=nd[i-].x) j++;
if(nd[i].isl) ln[nd[i].id].l=j;
else ln[nd[i].id].r=j;
}sort(ln+,ln+N+,cmp2); build(,,N*);
for(i=,j=;i<=N;i++){
add(,ln[i].l,ln[i].r,);
if(tr[].num>=M){
while(tr[].num>=M){j++;add(,ln[j].l,ln[j].r,-);}
ans=min(ans,ln[i].siz-ln[j].siz);
}
}
if(ans!=0x7fffffff) printf("%d",ans);
else printf("-1");
}
luogu1712 区间 (尺取法+线段树)的更多相关文章
- 洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化
洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一 ...
- codeforces 652C C. Foe Pairs(尺取法+线段树查询一个区间覆盖线段)
题目链接: C. Foe Pairs time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- luogu P1712 [NOI2016]区间 贪心 尺取法 线段树 二分
LINK:区间 没想到尺取法. 先说暴力 可以发现答案一定可以转换到端点处 所以在每个端点从小到大扫描线段就能得到答案 复杂度\(n\cdot m\) 再说我的做法 想到了二分 可以进行二分答案 从左 ...
- BZOJ4653 尺取法 + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=4653 首先很容易想到离散之后排序,用线段树或者树状数组去维护. 问题在于按照什么排序,如果按照左端 ...
- 线段树:CDOJ1597-An easy problem C(区间更新的线段树)
An easy problem C Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- 【NOI2016】区间 题解(线段树+尺取法)
题目链接 题目大意:给定$n$个区间$[l_i,r_i]$,选出$m$个区间使它们有一个共同的位置$x$,且使它们产生的费用最小.求最小费用.费用定义为最长的区间长度减去最短区间长度. ------- ...
- NOI2016区间bzoj4653(线段树,尺取法,区间离散化)
题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间,使得这 \(M\) 个区间共同包含至少一个 ...
- HDU 4553 约会安排 (区间合并)【线段树】
<题目链接> 寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有 ...
- HDU 1540 Tunnel Warfare(经典)(区间合并)【线段树】
<题目链接> 题目大意: 一个长度为n的线段,下面m个操作 D x 表示将单元x毁掉 R 表示修复最后毁坏的那个单元 Q x 询问这个单元以及它周围有多少个连续的单元,如果它本身已经被 ...
随机推荐
- 记一次艰难的jquery easy-ui ajax post 体验
分享的经验和教训是: 1.jquery easy-ui ajax post 复杂的Json给后端解析,后端如果接收和解析 2.asp.net webform jquery easy-ui datagr ...
- ngx_pagespeed-nginx前端优化模块介绍
ngx_pagespeed是Nginx的一个扩展模块,借助pagespeed,为Nginx网站服务器提速.主要的功能是针对前端页面而进行服务器端的优化,对前端设计人员来说,可以省去优化css.js以及 ...
- xcode archive 去掉dsym文件和添加dsym文件
打包慢,让人发狂!!! 所以我们尝试的去掉一些测试时候用不到的东西 比如DSYM: 这DSYM是收集奔溃的.在测试的时候不需要这些东西的所以去掉就好: 项目 Build Settings -> ...
- A. A Prank
题意 有数列从小到大排列,都是不同范围1~ 1000,问你最多去掉多少个数字还能复原 由于wrong很多发所以写一下 链接 [http://codeforces.com/contest/1062/pr ...
- HashMap和HashTable区别【转载】
今天看到的HashMap和HashTable区别介绍,收藏留着学习. 出处:http://www.importnew.com/24822.html 代码版本 JDK每一版本都在改进.本文讨论的Hash ...
- 撰写POPUSH需求文档
不当家不知柴米贵,撰写了正规的软件需求文档才知道软件工程的复杂性 感谢@洪宇@王需@江林楠下午的加班加点,五个人正闷在406B奋斗中,加油!
- Asp.net框架与SpringMvc框架简单分析
(此文为自我总结,错误很多请勿借鉴) 1.就前两天分析SpringMvc框架中是通过controler来实现跳转页面,通过mapping来实现数据连接 分析的方法又通过java的类之间进行相互调用,个 ...
- LeetCode 363:Max Sum of Rectangle No Larger Than K
题目链接 链接:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ 题解&代码 1 ...
- 广商博客冲刺第二天new
队名:雷锋队 队员:叶子鹏 王佳宁 张奇聪 张振演 曾柏树 项目:广商博客(嵌入APP) 执笔人:王佳宁 第一天沖刺傳送門 第三天沖刺傳送門 今天主要是写需求分析,在经过组员的热烈地讨论,需求分析如下 ...
- fswatch rsync配置使用 rsync 传输大量细小文件
贴一个脚本这个脚本是rsync远程同步使用的一个脚本 rsync -avz --progress --exclude .git /Users/piperck/Desktop/gogogo/x pipe ...