博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ2298】[HAOI2011]problem a
阅读量:4599 次
发布时间:2019-06-09

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

题解:

虽然也是个可以过得做法。。。但又没有挖掘到最简单的做法。。。

正解是发现这个东西等价于求不相交区间个数

直接按照右端点排序,然后贪心就可以O(n)过了

而我的做法是按照a排序(其实我是在模拟这个过程但我没有发现他的本质。。。)

然后f[i][j]表示前i个,最大要求为j的最大值

然后用线段树来优化这个东西

一个地方存在的东西还要取个min

代码:

 

#include 
using namespace std;#define rint register int#define IL inline#define rep(i,h,t) for (rint i=h;i<=t;i++)#define dep(i,t,h) for (rint i=t;i>=h;i--)#define mid ((h+t)/2)const int N=2e5+100;struct re{ int a,b,c;}a[N],b[N];bool cmp(re x,re y){ return (x.a
>n; rep(i,1,n) cin>>a[i].a>>a[i].b; sort(a+1,a+n+1,cmp); int l=0; rep(i,1,n) if (a[i].a==a[i-1].a&&a[i].b==a[i-1].b) b[l].c++,b[l].c=min(b[l].c,n-a[i].a-a[i].b); else { b[++l].a=a[i].a; b[l].b=a[i].b; b[l].c=1; } rep(i,1,l) { int x=S.find(1,1,n,1,b[i].a); S.change(1,1,n,n-b[i].b,x+b[i].c); } int ans=S.find(1,1,n,1,n); cout<
<

 

转载于:https://www.cnblogs.com/yinwuxiao/p/9575815.html

你可能感兴趣的文章
Matlab画图-非常具体,非常全面
查看>>
365. Water and Jug Problem
查看>>
SQL数据库数据检索top和distinct
查看>>
平衡搜索树--红黑树 RBTree
查看>>
sqlite驱动下载
查看>>
让IE6/IE7/IE8浏览器支持CSS3属性
查看>>
队列实现霍夫曼树
查看>>
【Java】图片高质量缩放类
查看>>
Python :类中设置默认属性并修改
查看>>
磁盘管理综合测试
查看>>
Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
查看>>
UMLet
查看>>
从父控件移除控件
查看>>
calc()制作自适应布局
查看>>
Markdown-写作必备
查看>>
关于在Java中 a!=a 值为真的解释(摘抄)
查看>>
C#串口小助手
查看>>
详解定位与定位应用
查看>>
【前端开发】 5分钟创建 Mock Server
查看>>
一个Tomcat配置参数引发的血案
查看>>