Blue Mary开公司
2024-10-20 20:40:26
Blue Mary开公司
题目大意:
每次加入一条形如 \(y=Px + S - P\) 的直线,询问 \(x=T\) 时此处最高的 \(y\) 值(\(S,P,T\)均为题中给出)
思路
很经典的李超树模板, 每次在整个线段树中加入一条直线
注意:每天最小收益至少为 \(0\)!!
即你的答案必然不小于 \(0\) !!
不会李超树的戳这里:李超树学习笔记
\(Code\)
#include<cstdio>
#include<cmath>
using namespace std;
const int T = 50010;
int n , fl[4 * T];
struct tree{
double k , b;
}seg[4 * T];
inline double max(double x , double y){return x < y ? y : x;}
inline double Intersection(double k1 , double b1 , double k2 , double b2){return 1.0 * (b2 - b1) / (k1 - k2);}
inline void update(double k , double b , int l , int r , int rt)
{
if (!fl[rt])
{
seg[rt].k = k , seg[rt].b = b , fl[rt] = 1;
return;
}
double f1 = seg[rt].k * l + seg[rt].b , f2 = seg[rt].k * r + seg[rt].b;
double f3 = k * l + b , f4 = k * r + b;
if (f1 >= f3 && f2 >= f4) return;
else if (f1 <= f3 && f2 <= f4) seg[rt].k = k , seg[rt].b = b;
else{
int mid = (l + r) >> 1;
double len = Intersection(k , b , seg[rt].k , seg[rt].b);
if (f1 <= f3)
{
if (len <= mid) update(k , b , l , mid , rt << 1);
else update(seg[rt].k , seg[rt].b , mid + 1 , r , rt << 1 | 1) , seg[rt].k = k , seg[rt].b = b;
}
else {
if (len > mid) update(k , b , mid + 1 , r , rt << 1 | 1);
else update(seg[rt].k , seg[rt].b , l , mid , rt << 1) , seg[rt].k = k , seg[rt].b = b;
}
}
}
inline double query(int l , int r , int rt , int x)
{
double ans = 1.0 * seg[rt].k * x + seg[rt].b;
if (l == r) return ans;
int mid = (l + r) >> 1;
if (x <= mid) ans = max(ans , query(l , mid , rt << 1 , x));
else ans = max(ans , query(mid + 1 , r , rt << 1 | 1 , x));
return ans;
}
int main()
{
char s[10];
double b , k;
int x;
scanf("%d" , &n);
for(register int i = 1; i <= 4 * 50005 + 1; i++) seg[i].b = -1e18 , seg[i].k = 0;
while(n--)
{
scanf("%s" , s + 1);
if (s[1] == 'P')
{
scanf("%lf %lf" , &b , &k);
b = b - k;
update(k , b , 1 , 5e4 + 5 , 1);
}
else {
scanf("%d" , &x);
double ans = query(1 , 5e4 + 5 , 1 , x);
if (ans <= 0) printf("0\n");
else printf("%d\n" , (int)(ans / 100));
}
}
}
最新文章
- UVA 820 --- POJ 1273 最大流
- stl(set+stack) LA 3634 The SetStack Computer
- Net use命令
- web_profile(网站分析)配置
- dom4j之小小工具
- .net mvc web api 返回 json 内容时过滤值为null的属性
- cd
- VMware中安装系统提示没有可用的映像(No image available)
- 部署redis4.0-cluster
- MySQL课堂小测
- JSONObject基本内容(一)
- PHP的类,abstract类,interface及关键字extends和implements
- js 正则表达式:密码必须由6-12位数字加字母组成
- [CF1063F]String Journey[后缀数组+线段树]
- C#判断一个字符串是否全部为空格的一个简单方法
- IntelliJ IDEA 2017版 编译器使用学习笔记(二) (图文详尽版);IDE快捷键使用
- macOS -- Mac系统如何编辑hosts文件
- Android Java访问本地方法(JNI)
- 02-JZ2440裸机学习之MMU内存管理单元【转】
- DataTable 转换成匿名集合类
热门文章
- DRF认证流程及源码分析
- PyQt5程序打包出错Failed to execute script
- Apache手动安装教程及报错解决梳理
- 【实时数仓】Day03-DWM 层业务:各层的设计和常用信息、访客UV计算、跳出明细计算(CEP技术合并数据识别)、订单宽表(双流合并,事实表与维度数据合并)、支付宽表
- 3A锂电池充电管理芯片PW4035
- 编程思想的转变 软件开发目录规范 collections、time、datetime、 random模块
- nuxt.js框架 如何打包 build
- JavaScript:操作符:逻辑运算符及其隐式转换数据类型
- python进阶之路21 正则应用 第三方模块之requests模块 openpyxl模块 简易爬虫(pandas)
- Java基础篇——常用类