博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚【贪心+堆||差分】
阅读量:4676 次
发布时间:2019-06-09

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

这个题方法还挺多的,不过洛谷上要输出方案所以用堆最方便

先按起始时间从小到大排序。
我用的是greater重定义优先队列(小根堆)。用pair存牛棚用完时间(first)和牛棚编号(second),每次查看队首的first是否比当前牛的起始时间早,是则弹出队首记录当前牛的答案,再把新的pair放进去,否则增加牛棚,同样要塞进队里

#include
#include
#include
#include
using namespace std;const int N=200005;int n,ans,bl[N];priority_queue
,vector
>,greater
> >q;struct qwe{ int l,r,id;}a[N];bool cmp(const qwe &a,const qwe &b){ return a.l
'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}int main(){ n=read(); for(int i=1;i<=n;i++) a[i].l=read(),a[i].r=read(),a[i].id=i; sort(a+1,a+1+n,cmp); ans=1,bl[a[1].id]=1; q.push(make_pair(a[1].r,1)); for(int i=2;i<=n;i++) { if(q.top().first

如果不输出方案的话,因为时间范围是1e6,所以直接差分做即可

#include
#include
using namespace std;const int N=1000005;int n,ans,mx,t[N];int read(){ int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}int main(){ n=read(); for(int i=1;i<=n;i++) { int l=read(),r=read(); t[l]++,t[r+1]--; mx=max(mx,r); } for(int i=1;i<=mx;i++) ans=max(ans,t[i]+=t[i-1]); printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/lokiii/p/8982554.html

你可能感兴趣的文章
cache—主存—辅存三级调度模拟
查看>>
Java线程的定义
查看>>
UglifyJS 压缩选项
查看>>
面向对象1
查看>>
Python-面向对象(组合、封装与多态)
查看>>
Mininet
查看>>
COSC2531 Programming Fundamentals
查看>>
设计模式系列 - 访问者模式
查看>>
20180507小测
查看>>
前端鼠标点击弹出浮动文字--民主、和谐、爱国、自由等
查看>>
eclipse左侧不见
查看>>
python会缓存小的整数和短小的字符
查看>>
格网与四叉树索引
查看>>
Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?...
查看>>
多张照片拍摄、图片浏览
查看>>
html(5) css
查看>>
Azure Web连接到Azure MySql Db
查看>>
《麻辣江湖》即将上线!
查看>>
Mybatis中mapper.xml文件判断语句中的单双引号问题
查看>>
frameset和frame
查看>>