【bzoj4653】[Noi2016]区间
离散化+线段树
- #include<algorithm>
- #include<iostream>
- #include<cstdlib>
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- using namespace std;
- typedef long long LL;
- #define INF 0x7fffffff
- #define N 5000010
- int n,m;
- struct data
- {
- int l,r,k;
- }a[N];
- bool operator < (data x,data y)
- {
- return x.k<y.k;
- }
- int b[N];
- int add[N],sum[N];
- int ans=INF,cnt;
- inline int getint()
- {
- int x=0,f=1;
- char ch=getchar();
- while (ch>'9' || ch<'0')
- {
- if (ch=='-')
- f=-1;
- ch=getchar();
- }
- while (ch>='0' && ch<='9')
- {
- x=x*10+ch-'0';
- ch=getchar();
- }
- return x*f;
- }
- inline void pushup(int now)
- {
- sum[now]=max(sum[now<<1],sum[now<<1|1]);
- }
- inline void pushdown(int now)
- {
- if (add[now])
- {
- sum[now<<1]+=add[now];
- sum[now<<1|1]+=add[now];
- add[now<<1]+=add[now];
- add[now<<1|1]+=add[now];
- add[now]=0;
- }
- }
- inline void update(int nowl,int nowr,int now,int l,int r,int d)
- {
- if (nowl>=l && nowr<=r)
- {
- sum[now]+=d;
- add[now]+=d;
- return ;
- }
- pushdown(now);
- int mid=nowl+nowr>>1;
- if (l<=mid)
- update(nowl,mid,now<<1,l,r,d);
- if (r>mid)
- update(mid+1,nowr,now<<1|1,l,r,d);
- pushup(now);
- }
- inline int get(int x)
- {
- int l=1,r=cnt,mid;
- while (l<r)
- {
- mid=l+r>>1;
- if (b[mid]>=x)
- r=mid;
- else
- l=mid+1;
- }
- return l;
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for (int i=1;i<=n;i++)
- {
- scanf("%d%d",&a[i].l,&a[i].r);
- a[i].k=a[i].r-a[i].l+1;
- b[++cnt]=a[i].l;
- b[++cnt]=a[i].r;
- }
- sort(a+1,a+n+1);
- sort(b+1,b+cnt+1);
- for (int i=1;i<=n;i++)
- a[i].l=get(a[i].l),a[i].r=get(a[i].r);
- for (int i=1,j=0;j<=n;)
- {
- if (sum[1]>m)
- {
- update(1,cnt,1,a[i].l,a[i].r,-1);
- i++;
- }
- else if (sum[1]<m)
- {
- j++;
- if (j<=n)
- update(1,cnt,1,a[j].l,a[j].r,1);
- }
- else
- {
- ans=min(ans,a[j].k-a[i].k);
- update(1,cnt,1,a[i].l,a[i].r,-1);
- i++;
- }
- }
- printf("%d\n",ans!=INF ? ans : -1);
- return 0;
- }
【bzoj4653】[Noi2016]区间的更多相关文章
- [BZOJ4653][NOI2016]区间 贪心+线段树
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...
- BZOJ4653: [Noi2016]区间
传送门 UOJ上卡掉一个点,COGS上卡掉两个点..弃疗,不改了,反正BZOJ上过啦hhh 先把区间按长度递增排序.然后每次用线段树维护区间最大覆盖次数,用一个指针随便扫扫就行了. //NOI 201 ...
- BZOJ4653 [NOI2016] 区间 【线段树】
题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...
- 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)
传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...
- BZOJ4653:[NOI2016]区间(线段树)
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- BZOJ4653 [NOI2016]区间 [线段树,离散化]
题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...
- 题解【bzoj4653 [NOI2016] 区间】
先按照长度排个序,然后依次添加区间.什么是添加?设这个区间是\([l,r]\),添加就是把\(a_l,a_{l+1},a_{l+2},{...},a_{r}\)都加上\(1\),其中\(a_i\)表示 ...
- BZOJ4653: [Noi2016]区间(线段树 双指针)
题意 题目链接 Sol 按照dls的说法,一般这一类的题有两种思路,一种是枚举一个点\(M\),然后check它能否成为答案.但是对于此题来说好像不好搞 另一种思路是枚举最小的区间长度是多少,这样我们 ...
- 【BZOJ4653】[Noi2016]区间 双指针法+线段树
[BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...
- 【BZOJ-4653】区间 线段树 + 排序 + 离散化
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 107 Solved: 70[Submit][Status][Di ...
随机推荐
- TOJ 2710: 过河 路径压缩
2710: 过河 Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Submit: 32 ...
- Quartz与Terracotta的集成
Quartz与Terracotta的集成 博客分类: Java&Socket 企业应用面临的问题 开源组件的应用 quartz任务集群数据库任务调度Terracotta Quartz与Ter ...
- HDU——1242Rescue(BFS+优先队列求点图最短路)
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- [BZOJ1595] [Usaco2008 Jan]人工湖(单调栈)
传送门 好难的题..至少对我来说. 这题就是模拟从最低的平台注水,然后将最低的填满以后从最低的平台向两边扩展,每次找最近的最低的平台h,然后将水填到h高度. 栈里存的是向外扩展的时候,有时会遇到高度递 ...
- P1651 塔 (动态规划)
题目描述 小明很喜欢摆积木,现在他正在玩的积木是由N个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块.每个木块只能用一次,也可以不用 ...
- leetcode 144 先序遍历和中序遍历差不多
这是只写了先序遍历的非递归代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode * ...
- uva 10090 二元一次不定方程
Marbles Input: standard input Output: standard output I have some (say, n) marbles (small glass ball ...
- 标准C程序设计七---23
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 树莓派学习笔记——I2C设备载入和速率设置
原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c ...
- Codechef Yet another cute girl
题意大概就是让你求一下[L,R]中的约数个数是素数的数的个数. 其中1<=L<=R<=1e12,R-L<=1e6. 然后我写了两种做法,第一种是可以直接搞出来L-R的约数个数, ...