题面

这道题的意思就是给出若干个一次函数,当\(x=x_0\)时,最大的\(y\)为多少

这种题可以用李超线段树来处理

什么是李超线段树呢?

李超线段树存储的是在区间上方暴露最多的直线标号,为了便于描述,我们称它为优势直线

例如下图

在区间[0,5],AB就是暴露最多的线段

可以证明,当\(x=x_0\)时最大的\(y\),一定属于所有包含\(x_0\)的区间的优势直线

那么我们怎么存储呢?

对于区间[l,r],如果没有优势直线,那么直接把当前直线改为它的优势直线

如果有优势直线,如果当前直线完全在优势直线上方,那么把当前直线视为优势直线

​ 如果完全在优势直线下方,那么直接返回即可

如果以上情况都不是,那么说明在当前区间两条直线各有优劣

那么我们比较在中点处哪条直线更靠上,将其改为当前区间的优势直线,另一条直线下放到子区间,它的优势范围在左侧就下放到左子区间,反之下放到右子区间

查询的时候对于每一层都去max即可

下面放这道题的代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#include<cmath>
#define db double
#define ll long long
#define gc getchar
#define maxn 100005
#define maxm 50005
using namespace std; inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}int n; db a[maxn],b[maxn];
db F(int p,int x){
return a[p]+b[p]*(x-1);
}
int t[maxm<<2];
#define lc p<<1
#define rc p<<1|1
void update(int p,int l,int r,int L,int R,int z){
if(l>R||r<L)return;
int m=l+r>>1;
db lz=F(z,l),rz=F(z,r),lv=F(t[p],l),rv=F(t[p],r);
if(lz>=lv&&rz>=rv){t[p]=z;return;}
if(lz<=lv&&rz<=rv)return;
int l1=t[p],l2=z;db mv=F(l1,m),mz=F(l2,m);
if(mz>mv)t[p]=z,swap(l1,l2);
if(b[l1]>b[l2])update(lc,l,m,L,R,l2);
else update(rc,m+1,r,L,R,l2);
}
db query(int p,int l,int r,int k){
if(l==r)return F(t[p],k);
int m=l+r>>1;db ans=F(t[p],k);
if(k<=m)return max(ans,query(lc,l,m,k));
else return max(ans,query(rc,m+1,r,k));
} int tot;
inline void solve_1(){++tot;
scanf("%lf%lf",&a[tot],&b[tot]);
update(1,1,50000,1,50000,tot);
}
inline void solve_2(){
int k=read();
printf("%d\n",(int)query(1,1,50000,k)/100);
} char s[10];
int main(){
n=read();
while(n--){
scanf("%s",s+1);
switch(s[1]){
case 'P':solve_1();break;
case 'Q':solve_2();break;
}
}
return 0;
}

P4254 [JSOI2008]Blue Mary开公司的更多相关文章

  1. [Luogu] P4254 [JSOI2008]Blue Mary开公司

    题目背景 Blue Mary 最近在筹备开一家自己的网络公司.由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案. 题目描述 万事开头难,经营公司更是如此.开始的收益往往是很低的,不过随 ...

  2. 洛谷P4254 [JSOI2008]Blue Mary开公司(李超线段树)

    题面 传送门 题解 李超线段树板子 具体可以看这里 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a ...

  3. P4254 [JSOI2008]Blue Mary开公司 (李超树)

    题意:插入一些一次函数线段 每次询问在x = x0处这些线段的最大值 题解:李超树模版题 维护优势线段 注意这题的输入是x=1时的b #include <iostream> #includ ...

  4. 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 602  Solved: 214[Submit ...

  5. bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司

    http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...

  6. 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)

    [BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...

  7. [BZOJ 1568][JSOI2008]Blue Mary开公司

    [BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...

  8. 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树

    [BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数.  接下来N行,每行开头一个单词“Query”或“P ...

  9. 1568: [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 题目描述 传送门 题目分析 简单分析可以发现就是不停给出了\(n\)条直线,要求每次给出一条直线后求出所有直线在横坐标为\(x\)时\(y\) ...

随机推荐

  1. 干货分享:五大最适合学习AI开发的编程语言

    AI(人工智能)为应用开发者开创了一个全新的可能性.通过利用机器学习或深度学习,您可以生成更好的用户配置文件.个性化设置和推荐,或者整合更智能的搜索.语音界面或智能助手,或者以其他数种方式改进您的应用 ...

  2. JMeter的__threadGroupName使用注意事项

    JMeter从4.1版本开始引入了一个新函数"${__threadGroupName}",这个函数的作用是返回当前线程组的名字.${__threadGroupName}的用途也较为 ...

  3. 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读

    本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...

  4. yocto-sumo源码解析(七): BitBakeServer

    1. 创建域套接字,管道以及锁: self.configuration = configuration self.featureset = featureset self.sockname = soc ...

  5. kubernetes高可用设计-master节点和kubectl

    部署master 节点 上一遍是CA证书和etcd的部署,这一篇继续搭建k8s,废话不多说.开始部署. kubernetes master 节点包含的组件有: kube-apiserver kube- ...

  6. Spark计算模型RDD

    RDD弹性分布式数据集 RDD概述 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行 ...

  7. 【视频编解码·学习笔记】13. 提取PPS信息程序

    PPS结构解析 与之前解析SPS方式类似 一.定义PPS类: 在3.NAL Unit目录下,新建PicParamSet.cpp和PicParamSet.h,在这两个文件中写入类的定义和函数实现. 类定 ...

  8. basename命令详解

    基础命令学习目录首页 摘要:前言bashname命令用于获取路径中的文件名或路径名(获取的时候叶子节点的元素内容)常见用法举例basenamepath获取末尾的文件名或路径名1:[aliyunzixu ...

  9. 第四节 Linux目录文件及文件基本操作

    一.Linux目录结构 Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘 ...

  10. C++:构造函数2——拷贝构造函数

     前言:拷贝构造函数是C++中的重点之一,在这里对其知识进行一个简单的总结. 一.什么是拷贝构造函数 在C++中,对于内置类型的变量来说,在其创建的过程中用同类型的另一个变量来初始化它是完全可以的,如 ...