博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USACO09FEB Fair Shuttle
阅读量:4631 次
发布时间:2019-06-09

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

据说\(NOIp\)前发题解可以\(\mathfrak{RP}\)++


因为要尽可能满足更多奶牛,所以按照这种区间贪心题的套路,先按右端点排序,然后依次遍历,能坐车的就让它们坐车,这样一定是最优的。

在贪心的时候,我们要知道在车在当前的时间段中最少有多少空位,可以用线段树维护(也可以不用线段树,但个人感觉用线段树比较好理解)。

#include
#include
#include
#include
#define ls p<<1#define rs p<<1|1#define mid ((l+r)>>1)using namespace std;int read(){ int k=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') k=k*10+c-48,c=getchar(); return k;}struct zzz{ int st,en,num;}cow[50010];bool cmp(zzz x,zzz y){ //按右端点排序 return x.en < y.en;}int tree[20010<<2],tag[20010<<2]; //以下为线段树维护区间最大值inline void down(int l,int r,int p){ tree[ls]+=tag[p]; tree[rs]+=tag[p]; tag[ls]+=tag[p]; tag[rs]+=tag[p]; tag[p]=0;}inline void up(int p){ tree[p]=max(tree[ls],tree[rs]);}void update(int l,int r,int p,int nl,int nr,int k){ if(l>=nl&&r<=nr){ tree[p]+=k; tag[p]+=k; return ; } down(l,r,p); if(nl<=mid) update(l,mid,ls,nl,nr,k); if(nr>mid) update(mid+1,r,rs,nl,nr,k); up(p);}int query(int l,int r,int p,int nl,int nr){ int ans=0; if(l>=nl&&r<=nr) return tree[p]; down(l,r,p); if(nl<=mid) ans=max(ans,query(l,mid,ls,nl,nr)); if(nr>mid) ans=max(ans,query(mid+1,r,rs,nl,nr)); return ans;}int main(){ int k=read(),n=read(),c=read(); for(int i=1;i<=k;i++) cow[i].st=read(),cow[i].en=read()-1,cow[i].num=read(); sort(cow+1,cow+k+1,cmp); int maxn=0; for(int i=1;i<=k;i++){ //遍历区间 int x=query(1,n,1,cow[i].st,cow[i].en); if(x

转载于:https://www.cnblogs.com/wxl-Ezio/p/9929271.html

你可能感兴趣的文章
解释一下python中的关系运算符
查看>>
【模板】组合数学
查看>>
data,bdata,idata,pdata,xdata,code存储类型与存储区
查看>>
JS知识整理之 Call&Apply方法
查看>>
MySql 和 PostGres 对照表
查看>>
sqlmap使用
查看>>
路由转发
查看>>
UITableView
查看>>
MySQL笔记
查看>>
SQL查询强化训练(2)
查看>>
Django 分页
查看>>
layuiAdmin 项目修改
查看>>
创新点子:博客图文混编工具
查看>>
NSUserDefault、NSMutableDictionary的setValue和setObject区别
查看>>
TreeSet&第三方比较器&Map
查看>>
经典算法mark
查看>>
http://channel9.msdn.com/Events/MIX
查看>>
静态页面:html5个人博客模板《绅士》
查看>>
mvc 基础概念
查看>>
mysql数据恢复
查看>>