博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj4653】[Noi2016]区间
阅读量:5361 次
发布时间:2019-06-15

本文共 1477 字,大约阅读时间需要 4 分钟。

离散化+线段树

#include
#include
#include
#include
#include
#include
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
'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
>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]

  

转载于:https://www.cnblogs.com/yangjiyuan/p/5761115.html

你可能感兴趣的文章
HDU-1465 不容易系列之一
查看>>
hdu3367Pseudoforest (最大生成树之kruskal 算法)
查看>>
Hive基础(5)---内部表 外部表 临时表
查看>>
【译】x86程序员手册31- 第9章 异常和中断
查看>>
php 命令行方式运行时 几种传入参数的方式
查看>>
asp.net注册页面代码
查看>>
Ways to keep WPF Application's UI alive...
查看>>
VC++6.0打包程序为可执行文件
查看>>
动画(一)
查看>>
NetworkReachable学习笔记
查看>>
从0到1
查看>>
Python 列表(list)与浅拷贝深拷贝介绍
查看>>
工具类---OC自定义函数---计算当前路径下所有代码文件的总行数 .c\.h\.m文件的总行数...
查看>>
快速阅读学习方法笔记
查看>>
IAR530变成了日语,改回英语
查看>>
二)spring 集成 ehcache jgroups 集群
查看>>
Linux更新程序脚本
查看>>
《工业大数据白皮书》2019版正式发布(附下载)
查看>>
手把手教你如何安装和使用Karma-Jasmine
查看>>
β版本第五次冲刺
查看>>