博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDU】6012 Lotus and Horticulture (BC#91 T2)
阅读量:6172 次
发布时间:2019-06-21

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

【算法】离散化

【题解】

答案一定存在于区间的左右端点、与区间左右端点距离0.5的点上

于是把所有坐标扩大一倍,排序(即离散化)。

让某个点的前缀和表示该点的答案。

初始sum=∑c[i]

在l[i]处加上a[i]-c[i],在r[i]+1处加上b[i]-a[i]。

从左到右计算sum并比较出最大值即可。

#include
#include
#include
#include
#include
#include
using namespace std;const int inf=0x3f3f3f3f,maxn=50010;struct cyc{ int x,y;}a[maxn*3];long long ans,sum;int n,A,B,C,D,E,cnt;bool cmp(cyc a,cyc b){ return a.x
'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int main(){ int T=read(); while(T--) { int n=read();sum=0,cnt=0; for(int i=1;i<=n;i++) { A=read(),B=read(),C=read(),D=read(),E=read();A*=2;B*=2; sum+=E; a[++cnt].x=A,a[cnt].y=C-E;a[++cnt].x=B+1,a[cnt].y=D-C; } sort(a+1,a+cnt+1,cmp); ans=sum; for(int i=1,now=1;i<=cnt;i++) { while(now<=cnt&&a[now].x==a[i].x){sum+=a[now].y;now++;} ans=max(ans,sum); } printf("%lld\n",ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/6340659.html

你可能感兴趣的文章
Linux下的uml画图工具
查看>>
xml返回数组数据
查看>>
约瑟夫问题总结
查看>>
spring mybatis 批量插入返回主键
查看>>
指针函数小用
查看>>
开源力量公开课第二十三期-从SVN到Git,次时代代码管理
查看>>
输入挂
查看>>
升级迁移前,存储过程统计各个用户下表的数据量,和迁移后的比对
查看>>
sql注入分类
查看>>
初识CSS选择器版本4
查看>>
[Hadoop in China 2011] 朱会灿:探析腾讯Typhoon云计算平台
查看>>
JavaScript之数组学习
查看>>
PHP 设置响应头来解决跨域问题
查看>>
CAS实现SSO单点登录原理
查看>>
博客园美化专用图片链接
查看>>
HDU_1969_二分
查看>>
高等代数葵花宝典—白皮书
查看>>
一种简单的图像修复方法
查看>>
基于DobboX的SOA服务集群搭建
查看>>
C#设计模式之装饰者
查看>>