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 询问这个单元以及它周围有多少个连续的单元,如果它本身已经被 ...
随机推荐
- CRC---循环冗余校验
typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned short uInt16; uint crc; // ...
- 校内模拟赛 旅行(by NiroBC)
题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...
- SNMP基础知识
注:本篇博客并非原创,仅是学习笔记 1. 概述1.1 诞生背景1.2 SNMP简介1.3 版本1.4 术语1.5 网络结构1.6 MIB简介2. Linux的SNMP安装 1. 概述 1.1 诞生背景 ...
- MVC_防止HttpPost重复提交
重复提交的场景很常见,可能是当时服务器延迟的原因,如购物车物品叠加,重复提交多个订单.常见的解决方法是提交后把Button在客户端Js禁用,或是用Js禁止后退键等.在ASP.NET MVC 3 Web ...
- CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)
机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面 ...
- 最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来
package com.example.home; import java.io.IOException; import java.io.InputStream; import javax.micro ...
- ### The error may involve defaultParameterMap ### The error occurred while setting parameters
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty; bad SQL grammar [ ...
- opencv学习笔记(五)
线性滤波 方框滤波--boxblur函数 均值滤波(邻域平均滤波)--blur函数 高斯滤波--GaussianBlur函数 中值滤波--medianBlur函数 双边滤波--bilateralFil ...
- 安装wamp提示You dont't have permission to accesson on this server的解决方案
展示一下安装好的效果图 首先找到安装目录下的路径[wamp\bin\apache\Apache2.2.21\conf\] § 找到httpd.conf,用记事本打开httpd.conf,然后将 1. ...
- laravel 在nginx服务器上除了首页其余都是404的问题
nginx对应站点的.conf配置文件添加如下代码 location / { try_files $uri $uri/ /index.php$is_args$query_string; #语法: tr ...