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 询问这个单元以及它周围有多少个连续的单元,如果它本身已经被 ...
随机推荐
- cmake 添加头文件目录,链接动态、静态库(转载)
来源网址:http://www.cnblogs.com/binbinjx/p/5626916.html 罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目 ...
- jQuery生成QRcode二维码
jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- zabbix监控主机cpu达到80%后报警
在zabbix监控中,默认cpu监控模板中的触发器,当负载在一定时间内(比如最近5分钟)超过5以上为报警阀值.但是在实际场景中,由于服务器配置不一样,这个默认的cpu触发器用起来意义就不大了,这时候就 ...
- 作业20171123 beta-review 成绩
申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年12月13日 17:00. 成绩 review NABCD-评论 SPEC-评论 bug found 答复 bugfi ...
- alpa开发阶段团队贡献分
这是我们团队之前决定的分配方式: 1.凡是认真完成自己任务的队员,都将有基础分30分(态度分). 2. 将整个项目细化为不同的任务,列出一个任务清单,在综合.协调完每名成员的意愿后,我会分配清单中的任 ...
- 【CV】ICCV2015_Learning Temporal Embeddings for Complex Video Analysis
Learning Temporal Embeddings for Complex Video Analysis Note here: it's a review note on novel work ...
- MyBatis中if,where,set标签
<if>标签 <select id="findActiveBlogWithTitleLike" resultType="Blog"> S ...
- Java awt项目开发
通过Java awt 界面上的知识编写的扫雷游戏 代码中有详细的注解 package com.langsin.saolei; import java.awt.Color;import java.awt ...
- 剑指offer:树的子结构
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 同样考虑用递归来做. 利用两个递归函数,一个用于判断两棵树树否相等,另一个递归取A的 ...
- 第三个Sprint ------第五天
显示计算对错代码 package com.app.senior_calculator; import java.math.BigDecimal; import java.util.EmptyStack ...