Description

Solution

考虑每个有买卖的日子,对于一个魂导器的贡献,它其实是一条直线。

那么对于每个日子,加入合法的直线,在线段树上更新即可。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#define fo(i,j,k) for(int i=j;i<=k;++i)
#define fd(i,j,k) for(int i=j;i>=k;--i)
#define ll long long
#define mem(a) memset(a,0,sizeof(a))
#define ll long long
using namespace std;
const int N=1e5+10;
const ll inf=1e15;
vector<int> b[N];
struct node{int d,p,r,g;
}a[N];
struct line{int k;ll b;ll f(int x){return (ll)k*x+b;}
}ln[N];
struct tree{int l,r,o;
}tr[N*50];
int tot=1,cnt=0;
int n,C,D,m=0;
bool cmp(node x,node y){return x.d<y.d;
}
double meet(int x,int y){return (ln[y].b-ln[x].b)*1.0/(ln[x].k-ln[y].k);
}
int change(int v,int l,int r,int x){if(!v) v=++tot;if(!tr[v].o) {tr[v].o=x;return v;}int o=tr[v].o;double p=meet(x,o);int mid=(l+r)>>1;if(p<=l*1.0 || p>=r*1.0 || ln[x].k==ln[o].k){if(ln[x].f(mid)>ln[o].f(mid)) tr[v].o=x;return v;}if(p<=mid*1.0){if(ln[x].k>ln[o].k) tr[v].o=x,tr[v].l=change(tr[v].l,l,mid,o);else tr[v].l=change(tr[v].l,l,mid,x);}else{if(ln[x].k<ln[o].k) tr[v].o=x,tr[v].r=change(tr[v].r,mid+1,r,o);else tr[v].r=change(tr[v].r,mid+1,r,x);}return v;
}
ll find(int v,int l,int r,int x){if(!v) return -inf;int o=tr[v].o;if(!o) return -inf;ll tmp=ln[o].f(x);if(l==r) return tmp;int mid=(l+r)/2;if(x<=mid) return max(tmp,find(tr[v].l,l,mid,x));else return max(tmp,find(tr[v].r,mid+1,r,x));
}
void add(int k,ll b){ln[++cnt].k=k,ln[cnt].b=b;change(1,1,D+1,cnt);
}
int d[N];
int main()
{freopen("practice.in","r",stdin);freopen("practice.out","w",stdout);int num,Q;scanf("%d %d",&num,&Q);while(Q--){scanf("%d %d %d",&n,&C,&D);fo(i,1,n) scanf("%d %d %d %d",&a[i].d,&a[i].p,&a[i].r,&a[i].g);sort(a+1,a+n+1,cmp);m=0;fo(i,1,n){if(a[i].d>D) break;a[i].d!=a[i-1].d?d[++m]=a[i].d:m;b[m].push_back(i);}cnt=0,add(0,C);fo(i,1,m){int o=b[i].size();ll now=find(1,1,D+1,d[i]);fo(j,0,o-1){int p=b[i][j];if(a[p].p<=now) add(a[p].g,-1ll*a[p].g*d[i]+now-a[p].p+a[p].r-a[p].g);}}ll ans=find(1,1,D+1,D+1);printf("%lld\n",ans);mem(tr),mem(ln),mem(d),tot=1;fo(i,1,m) b[i].clear();}
}

【JZOJ5620】修炼相关推荐

  1. JZOJ5620. 【NOI2018模拟4.1】修炼

    题目描述 懒得改 奥妙重重的题面 10% 暴力? O(2n)O(2^n) 30% Dp,按照时间排序 设f[i]表示当前买第i个魂导器的最大收益. 则f[i]=max(f[i],f[j]+r[j]+( ...

  2. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  3. java修炼手册3.8_Java修炼手册

    <Java修炼手册免费版>是一款专为想要自学JAVA的用户打造的全方位掌上学习软件,拥有各阶段的科学课程模块,从视频,资料,图片,演示等多种方面全面引导用户科学而快速的融入JAVA的世界中 ...

  4. 书单 | 计算机视觉的修炼秘笈

    本文来自微软研究院AI头条 不久前我们推出的自然语言学习书单推荐受到了大家的热烈欢迎,在此先感谢大家的关注和支持. 与此同时,有很多读者纷纷留言想得到计算机视觉领域的图书推荐.今天我们就满足大家的愿望 ...

  5. C语言嵌入式系统编程修炼之道——性能优化篇

    C语言嵌入式系统编程修炼之道--性能优化篇 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 1.使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌 ...

  6. IT人的八大修炼神器

    看到 2018 年的 KPI,你是否感到崩溃?在这个充满竞争的时代,你需要用最有效方式,学习最有用知识,来提高自身技能.特意为大家准备了 IT 人的八大修炼神器,推荐能帮助我们提升技术的公众号,欢迎大 ...

  7. carbon 一天的开始 结束_情话文案:朋友圈背景图丨2020国庆最后一天朋友圈的说说文案 修炼七天的你,是否准备就绪?...

    感谢大家的阅读,喜欢小编为你精心编辑的文章吗?欢迎留言评论,小编都会虚心接受的,你们是小编前进的动力哦.每天一点点进步,分享彼此的欢乐!如果喜欢就关注订阅吧!也不要忘记点在看哦~亲. 注:本文转载自网 ...

  8. 《数据科学家修炼之道》一2.2 新规则

    本节书摘来异步社区<数据科学家修炼之道>一书中的第2章,第2.2节,作者: [美]Zacharias Voulgaris(弗格里斯)译者: 吴文磊 , 田原 责编: 陈冀康,更多章节内容可 ...

  9. 大脑天天超负荷,三分天赋,七分练,世间惊现普通脑修炼秘籍

    普通脑脑如其名,十分普通,就像是大海中的一滴水,被裹挟着前进,承受着每个阶段的拷问,偶尔能战胜,时时被打趴. 魔头来又去,始终是"东方语文""慕容数"和&quo ...

最新文章

  1. 面试官问你 SpringMVC 的工作原理,你还不知道吗?
  2. 扩展筛选LightOj 1054 Efficient Pseudo Code
  3. B树、B+树、B*树谈到R 树
  4. linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具
  5. Vmware fusion强制断电,关闭虚拟机
  6. 通信 —— 串口与并口
  7. [P2396] yyy loves Maths VII
  8. 网站五万ip需要服务器,30万IP网站要用什么样的服务器?
  9. 多选题spss相关分析_spss多选题的录入及分析
  10. 计算机组装维修中级试题,维修电工中级培训考试题及答案
  11. 一战托福5个月112分 经验分享 + 备考资料大放送
  12. owlBus 的uwp版本上架了
  13. CUDA编程学习0——环境搭建环境详解
  14. CT一般扫描参数_CT胶片上那些与剂量相关的参数!
  15. 元宵节就要到了,手把手教你用Python打造一款3D花灯
  16. Mybatis中的关系映射(一对一,一对多,多对多)
  17. 快应用之先写出第一个hello world
  18. java实现红包要多少钱_java实现微信红包分配算法
  19. F12下看html页面的响应时间,浏览器F12 Finish DOMContentLoaded load时间如何计算出来?...
  20. 西班牙列车推出QR码阅读新方式

热门文章

  1. 该如何使用MySQL的存储过程?
  2. 西部数据WD移动硬盘在电脑上不显示盘符解决办法
  3. 2022年全球市场电视遥控器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  4. [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)
  5. day_14 常用API
  6. CAD中怎么设置线宽?CAD图纸打印出来线条太粗怎么办?
  7. URG与PSH的区别
  8. Adobe的音频编辑软件Adobe Audition (Au)2023版本下载与安装教程
  9. 数据可视化工具Table-au的破解安装
  10. jsp健身房会员管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目