Two - pointer 第一题…… 大概就是对于一段连续的区间求解,使用两个指针不断卡区间的长度直到区间不满足条件吧。

  这题只要对区间以长度从小到大排一下序,然后使用两个指针指向区间。线段树维护被覆盖最多次数的节点被覆盖了多少次。如果满足条件,由于我们是在第一次判断的时候发现它满足条件的,所以最后加入的这个区间一定对于答案产生了贡献,也就是最大的区间。要使最小区间最大化,我们只需让前面的指针慢慢往后跳直到不符合条件即可。

#include <bits/stdc++.h>
using namespace std;
#define maxn 5000000
#define INF 999999999
int n, m, tot, cnt, b[maxn];
int ans = INF, num[maxn];
int mark[maxn];
map <int, int> Map; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} struct node
{
int l, r, len;
friend bool operator <(const node& a, const node& b)
{
if(a.len != b.len) return a.len < b.len;
else if(a.l != b.l) return a.l < b.l;
else return a.r < b.r;
}
}A[maxn]; void push_down(int p)
{
if(!mark[p]) return;
num[p << ] += mark[p], num[p << | ] += mark[p];
mark[p << ] += mark[p];
mark[p << | ] += mark[p];
mark[p] = ;
} void update(int p, int l, int r, int L, int R, int x)
{
if(L <= l && R >= r)
{
num[p] += x; mark[p] += x;
return;
}
if(L > r || R < l) return;
push_down(p);
int mid = (l + r) >> ;
update(p << , l, mid, L, R, x), update(p << | , mid + , r, L, R, x);
num[p] = max(num[p << ], num[p << | ]);
} int main()
{
n = read(), m = read();
for(int i = ; i <= n; i ++)
{
A[i].l = read(), A[i].r = read(), A[i].len = A[i].r - A[i].l;
b[++ tot] = A[i].l, b[++ tot] = A[i].r;
}
sort(A + , A + + n);
sort(b + , b + + tot); b[] = -;
for(int i = ; i <= tot; i ++)
if(b[i] != b[i - ]) Map[b[i]] = ++ cnt;
sort(A + , A + + n);
for(int i = ; i <= n; i ++) A[i].l = Map[A[i].l], A[i].r = Map[A[i].r];
for(int i = , j = ; i <= n; i ++)
{
update(, , cnt, A[i].l, A[i].r, );
if(num[] < m) continue;
int tem = A[i].len, tem2 = ;
while(num[] >= m)
{
tem2 = A[j].len;
update(, , cnt, A[j].l, A[j].r, -), j ++;
}
ans = min(ans, tem - tem2);
}
if(ans == INF) printf("-1\n");
else printf("%d\n", ans);
return ;
}

【题解】NOI2016区间的更多相关文章

  1. 【题解】P1712 [NOI2016]区间(贪心+线段树)

    [题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...

  2. [NOI2016]区间 题解(决策单调性+线段树优化)

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1593  Solved: 869[Submit][Status][ ...

  3. [BZOJ4653][NOI2016]区间 贪心+线段树

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...

  4. 【BZOJ4653】[Noi2016]区间 双指针法+线段树

    [BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...

  5. BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针

    BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...

  6. [Noi2016]区间[离散化+线段树维护+决策单调性]

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 621  Solved: 329[Submit][Status][D ...

  7. [NOI2016]区间 线段树

    [NOI2016]区间 LG传送门 考虑到这题的代价是最长边减最短边,可以先把边按长度排个序,双指针维护一个尺取的过程,如果存在包含某个点的区间数\(\ge m\),就更新答案并把左指针右移,这样做的 ...

  8. Luogu P1712 [NOI2016]区间(线段树)

    P1712 [NOI2016]区间 题意 题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间, ...

  9. 洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化

    洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一 ...

随机推荐

  1. java操作HDFS

    package com.lei.hadoop; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Fil ...

  2. L011系统文件属性知识进阶详解小节

    L011系统文件属性知识进阶详解小节 这节课的内容相对来说较少,一上午加中午就听完了,现在总结一下,最后会有一个相关的面试题. 首先先附上一张图: 今天学习主要跟①和②有关,①为Inode 号 ②为文 ...

  3. 关于 NPOI 导出的 Excel 出现“部分内容有问题” 的解决方法

    近期发现使用 NPOI 导出的 Excel 文件,有部分用户反映在打开时报错,测试了一下,发现在低版本的 Office 中(2003版,配合2007格式兼容包)打开正常,但在高版本 Office 中, ...

  4. mysql5.6 无法远程连接问题解决

    需要配置mysql5.6版本的my.cnf文件,我的my.cnf文件配置如下: port=3306是我后来自己加上的.加上这个之后重启mysql service mysqld restart 记得给r ...

  5. 第一篇 HTML基础

    浏览网页,就是上网,上网的本质就是下载内容. 浏览器是个解释器,用来执行HTML.css.JS代码的. HTML,CSS, JavaScript 号称网络三剑客. 1. 浏览器发送一个域名给服务端 2 ...

  6. TPO-16 C1 Reserve the room for a rehearsal

    TPO-16 C1 Reserve the room for a rehearsal 第 1 段 1.Listen to a conversation between a Student and a ...

  7. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  8. java 流 文件 IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  9. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  10. 【转】MMO即时战斗:地图角色同步管理和防作弊实现

    ---转自CSDN 一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角 ...