Time:2016.08.09
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
当时打同步赛的时候
花了3h去做T3提答
大概玩了50分
回来看T1竟然是懵逼状态……

想了一会,满脑子都是离散化后差分前缀和处理blabla
但不知道怎么处理区间覆盖大于m时答案的最优性
(为什么当时连按区间大小排序的思路都没有想到?!)
其实按照区间大小排序,那么答案一定是a[l],a[l+1]..a[r]这些区间的并集,所以我们把i从1枚举到n,同时j=1,操作为
1.每次覆盖一下区间a[j],看一下有没有被覆盖大于等于m的点,如果有就去拿最长区间-最小区间与ans比较,否则++j,继续看一下有没有覆盖大于等于m的点;
2.把a[i]区间去除
覆盖,去除,检查大于等于m的点都可以用线段树的区间覆盖,单点查询最大值解决
复杂度O(nlog2n)O(nlog_2n)
常数主要在离散化那里
希望明年的自己不会滚粗
……
……
……
但前提是要先进省队!!!
……
……
……
更大的前提是把3个月后的NOIP考好!!!

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 500002
using namespace std;
int in()
{int t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
int a[M<<1],lazy[M<<3],tr[M<<3];
int n=in(),m=in();
struct node
{int l,r,len;bool operator <(node other)const {return len<other.len;}
}q[M];
void pushdown(int rt)
{if (!lazy[rt]) return;lazy[rt<<1]+=lazy[rt];lazy[rt<<1|1]+=lazy[rt];tr[rt<<1]+=lazy[rt];tr[rt<<1|1]+=lazy[rt];lazy[rt]=0;
}
void update(int rt,int begin,int end,int L,int R,int val)
{if (L<=begin&&end<=R){tr[rt]+=val;lazy[rt]+=val;return;}pushdown(rt);int mid=begin+end>>1;if (mid>=L) update(rt<<1,begin,mid,L,R,val);if (mid<R)  update(rt<<1|1,mid+1,end,L,R,val);tr[rt]=max(tr[rt<<1],tr[rt<<1|1]);
}
main()
{for (int i=1;i<=n;i++)q[i].l=in(),q[i].r=in(),q[i].len=q[i].r-q[i].l,a[++a[0]]=q[i].l,a[++a[0]]=q[i].r;sort(a+1,a+a[0]+1);a[0]=unique(a+1,a+a[0]+1)-(a+1);for (int i=1;i<=n;i++)q[i].l=lower_bound(a+1,a+a[0]+1,q[i].l)-a,q[i].r=lower_bound(a+1,a+a[0]+1,q[i].r)-a;sort(q+1,q+n+1);int ans=1<<30,t=0;for (int i=1;i<=n;i++){while (t<n&&tr[1]<m)t++, update(1,1,a[0],q[t].l,q[t].r,1);if (tr[1]>=m) ans=min(ans,q[t].len-q[i].len);else break;update(1,1,a[0],q[i].l,q[i].r,-1);}printf("%d",ans==1<<30?-1:ans);
}

【BZOJ4653】区间,离散化+线段树相关推荐

  1. poj/OpenJ_Bailian - 2528 离散化+线段树

    传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...

  2. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

  3. [牛客网#35D 树的距离]离散化+线段树合并

    [牛客网#35D 树的距离]离散化+线段树合并 分类:Data Structure SegMent Tree Merge 1. 题目链接 [牛客网#35D 树的距离] 2. 题意描述 wyf非常喜欢树 ...

  4. 850. 矩形面积 II:扫描线+离散化+线段树

    Difficulty: hard 标签: 扫描线, 离散化, 线段树 题目链接 力扣 题目解析 面试代码 /** x轴方向使用扫描线,y轴方向使用线段树维护扫描线的长度和每个区间覆盖的次数.由于y轴方 ...

  5. 27.CF1004F Sonya and Bitwise OR 区间合并线段树

    27.CF1004F Sonya and Bitwise OR 区间合并线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 给定序 ...

  6. [UOJ #222][NOI2016]区间(线段树)

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...

  7. Mayor's posters POJ - 2528 (离散化+线段树)

    题意: 在1~10000000这个区间中读取n个海报的区间信息,后面的海报会覆 盖前面的海报,问最后能看到几张海报.(本题是一道bug题下面会提) 题目: The citizens of Byteto ...

  8. CF803G-Periodic RMQ Problem【离散化,线段树,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为nnn的序列aaa复制kkk份连接,要求支持 区间赋值 区间查询最小值 n,q∈[1 ...

  9. P1712-[NOI2016]区间【线段树,尺取法】

    正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 nnn个区间,求出其中mmm个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小. 解题思 ...

最新文章

  1. mysql 软件导出导入数据_MySQL 之 导出导入数据
  2. typedef的作用
  3. SAP MM里的ERS功能不适用于供应商寄售采购模式
  4. mysql设计积分兑换表_积分系统数据库表设计.docx
  5. 全国软考数据库系统工程师教程(第2版)目录
  6. php如何复制一个对象,PHP中的对象复制及__clone() 函数
  7. java是什么_Java是什么?Java的特点有哪些?
  8. 怎么压缩图片大小,压缩图片大小的小妙招
  9. STM32 HAL库实现US微秒延时函数
  10. 攻防世界PWN新手练习区WP
  11. python 作图:heatmap
  12. 《让子弹飞》系列——张麻子的斗争策略
  13. 赛福天拟增资LG供应商,切入动力电池领域;清能股份氢燃料电池渣土车项目落地佛山 | 能动...
  14. 无延时直播与传统视频直播优势对比
  15. 1688商品详情API接口(1688商品信息查询接口)
  16. linux关闭内存插槽,linux 统管理中的查看内存插槽数、最大容量和频率
  17. 人工智能在自动驾驶深度学习中的应用
  18. 递归查询T100的BOM
  19. 域名备案注销 麦谈帮API数据接口
  20. CTF中 Crypto(密码学)在线解密网站

热门文章

  1. 如何通过虚拟私有云保障服务安全【华为云分享】
  2. Vue-Router中History模式【华为云分享】
  3. Python 绘制散点图
  4. 【java基础知识】swagger组件常用命令
  5. 【python基础知识】AttributeError: module 'turtle' has no attribute 'setup'
  6. 3_less混和(使用类来混合)
  7. .net mysql 多线程_.Net多线程问题总结
  8. linux更新软件载入缓存后停止_linux 中缓存怎样清除
  9. ssh 连接_Docker实战——使用SSH连接docker容器
  10. Linux/deppin 中安装、卸载软件的几种命令