当前位置: 首页 > news >正文

Good Inflation SPOJ - GOODG 李超树

题目传送门

题意:刚开始有一个气球体积为空,现在有n个充气点,从1->n遍历这n充气点,每个充气点有vi,di,vi为走到这个充气点之后可以为气球充气vi的体积,di为选择了在这个点充气的时候,每次往后走气球会漏di的气体。

题解:李超线段树裸题。

李超树主要是维护优势线段。

每一个节点存一条线段的信息。

每次更新的时候,如果新的线段完全在原来的下方,直接return,

如果新的线段在原来的直线的上方,这存下新的线段。

否者就是有交点,我们继续往下走,更新一下下面的线段。

注意的就是,每个节点只存一条线段的内容, 有2条线段出现在[l,r]这个节点中的时候,我们存下优势长的那一条信息。

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
 4 #define LL long long
 5 #define ULL unsigned LL
 6 #define fi first
 7 #define se second
 8 #define pb push_back
 9 #define lson l,m,rt<<1
10 #define rson m+1,r,rt<<1|1
11 #define lch(x) tr[x].son[0]
12 #define rch(x) tr[x].son[1]
13 #define max3(a,b,c) max(a,max(b,c))
14 #define min3(a,b,c) min(a,min(b,c))
15 typedef pair<int,int> pll;
16 const int inf = 0x3f3f3f3f;
17 const LL INF = 0x3f3f3f3f3f3f3f3f;
18 const LL mod =  (int)1e9+7;
19 const int N = 1e6 + 100;
20 LL treeb[N<<2],treek[N<<2];
21 bool vis[N<<2];
22 double Intersection(double k1,double b1,double k2,double b2){return 1.0*(b2-b1)/(k1-k2);}
23 void update(LL k,LL b,int l,int r,int rt){
24     if(!vis[rt]) {
25         treek[rt] = k;
26         treeb[rt] = b;
27         vis[rt] = 1;
28         return;
29     }
30     LL l1 = k * l + b, l2 = treek[rt] * l + treeb[rt];
31     LL r1 = k * r + b, r2 = treek[rt] * r + treeb[rt];
32     if(l1 <= l2 && r1 <= r2) return ;
33     if(l1 >= l2 && r1 >= r2) treek[rt] = k, treeb[rt] = b;
34     else{
35         int m = l + r >> 1;
36         double crs = Intersection(k, b, treek[rt], treeb[rt]);
37         if(l1 >= l2){
38             if(crs <= m) update(k,b,lson);
39             else{
40                 update(treek[rt], treeb[rt], rson);
41                 treek[rt] = k; treeb[rt] = b;
42             }
43         }
44         else{
45             if(crs > m) update(k, b, rson);
46             else{
47                 update(treek[rt], treeb[rt], lson);
48                 treek[rt] = k; treeb[rt] = b;
49             }
50         }
51     }
52 }
53 
54 
55 
56 
57 LL query(int x,int l,int r,int rt){
58     LL ans=0;
59     if(vis[rt]) ans=max(ans, x*treek[rt]+treeb[rt]);
60     if(l == r) return ans;
61     int m = l+r >> 1;
62     if(m >= x) ans = max(ans, query(x, lson));
63     else ans = max(ans, query(x, rson));
64     return ans;
65 }
66 int v[N], d[N];
67 int main(){
68     int n;
69     scanf("%d", &n);
70     for(int i = 1; i <= n; i++)
71         scanf("%d%d", &v[i], &d[i]);
72     update(-d[1],v[1]+d[1],0,n+1,1);
73     for(int i = 2; i <= n; i++){
74         LL zz = query(i,0,n+1,1) + v[i];
75         update(-d[i],zz+1ll*d[i]*i,0,n+1,1);
76     }
77     LL ans = query(n+1,1,n,1);
78     if(ans < 0) ans = 0;
79     cout << ans << endl;
80     return 0;
81 }
View Code

 

转载于:https://www.cnblogs.com/MingSD/p/9856091.html

相关文章:

  • 【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试
  • CMake入门指南
  • python里面的全局变量小例子
  • 11月14日学习内容整理:Js事件细讲,事件委派
  • DynamicJasper入门
  • 更大,还是更快:Savvio 10K.2和Savvio 15K.1
  • 学以致用二十七-----Centos7.5二进制安装mysql5.7.23
  • DNN中的Skinning系统
  • nginx知识总结
  • 关于外键约束和对应主键信息的查询脚本
  • struts2知识复习之二
  • 将链表逆序(Revert)的C#实现
  • 高中数学中需要重点关注的函数和图像
  • 如何实现DES算法
  • TensorFlow系列专题(三):深度学习简介
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 230. Kth Smallest Element in a BST
  • gops —— Go 程序诊断分析工具
  • HTTP--网络协议分层,http历史(二)
  • iOS小技巧之UIImagePickerController实现头像选择
  • learning koa2.x
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis学习笔记 - pipline(流水线、管道)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Zepto.js源码学习之二
  • 番外篇1:在Windows环境下安装JDK
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 警报:线上事故之CountDownLatch的威力
  • 排序算法之--选择排序
  • 普通函数和构造函数的区别
  • 仓管云——企业云erp功能有哪些?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #Linux(权限管理)
  • (07)Hive——窗口函数详解
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (六)Hibernate的二级缓存
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (学习日记)2024.01.19
  • (转)jdk与jre的区别
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET BackgroundWorker
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net(C#)中String.Format如何使用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net中我喜欢的两种验证码
  • /etc/skel 目录作用
  • @RequestMapping-占位符映射