Blue Mary开公司

题面:[JSOI2008]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));
}
}
}

最新文章

  1. UVA 820 --- POJ 1273 最大流
  2. stl(set+stack) LA 3634 The SetStack Computer
  3. Net use命令
  4. web_profile(网站分析)配置
  5. dom4j之小小工具
  6. .net mvc web api 返回 json 内容时过滤值为null的属性
  7. cd
  8. VMware中安装系统提示没有可用的映像(No image available)
  9. 部署redis4.0-cluster
  10. MySQL课堂小测
  11. JSONObject基本内容(一)
  12. PHP的类,abstract类,interface及关键字extends和implements
  13. js 正则表达式:密码必须由6-12位数字加字母组成
  14. [CF1063F]String Journey[后缀数组+线段树]
  15. C#判断一个字符串是否全部为空格的一个简单方法
  16. IntelliJ IDEA 2017版 编译器使用学习笔记(二) (图文详尽版);IDE快捷键使用
  17. macOS -- Mac系统如何编辑hosts文件
  18. Android Java访问本地方法(JNI)
  19. 02-JZ2440裸机学习之MMU内存管理单元【转】
  20. DataTable 转换成匿名集合类

热门文章

  1. DRF认证流程及源码分析
  2. PyQt5程序打包出错Failed to execute script
  3. Apache手动安装教程及报错解决梳理
  4. 【实时数仓】Day03-DWM 层业务:各层的设计和常用信息、访客UV计算、跳出明细计算(CEP技术合并数据识别)、订单宽表(双流合并,事实表与维度数据合并)、支付宽表
  5. 3A锂电池充电管理芯片PW4035
  6. 编程思想的转变 软件开发目录规范 collections、time、datetime、 random模块
  7. nuxt.js框架 如何打包 build
  8. JavaScript:操作符:逻辑运算符及其隐式转换数据类型
  9. python进阶之路21 正则应用 第三方模块之requests模块 openpyxl模块 简易爬虫(pandas)
  10. Java基础篇——常用类