P4254 [JSOI2008]Blue Mary开公司
这道题的意思就是给出若干个一次函数,当\(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开公司的更多相关文章
- [Luogu] P4254 [JSOI2008]Blue Mary开公司
题目背景 Blue Mary 最近在筹备开一家自己的网络公司.由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案. 题目描述 万事开头难,经营公司更是如此.开始的收益往往是很低的,不过随 ...
- 洛谷P4254 [JSOI2008]Blue Mary开公司(李超线段树)
题面 传送门 题解 李超线段树板子 具体可以看这里 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a ...
- P4254 [JSOI2008]Blue Mary开公司 (李超树)
题意:插入一些一次函数线段 每次询问在x = x0处这些线段的最大值 题解:李超树模版题 维护优势线段 注意这题的输入是x=1时的b #include <iostream> #includ ...
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214[Submit ...
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- [BZOJ 1568][JSOI2008]Blue Mary开公司
[BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
[BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“P ...
- 1568: [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 题目描述 传送门 题目分析 简单分析可以发现就是不停给出了\(n\)条直线,要求每次给出一条直线后求出所有直线在横坐标为\(x\)时\(y\) ...
随机推荐
- APP测试基本流程以及APP测试要点
APP测试流程梳理 APP测试要点梳理 链接:http://pan.baidu.com/s/1gfaEZ1x 密码:07yt 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开 ...
- Appium+python的单元测试框架unittest(1)(转)
unittest为python语言自带的单元测试框架,python把unittest封装为一个标准模块封装在python开发包中.unittest中常用的类有:unittest.TestCase.un ...
- FATAL ERROR: Tried to use mysqladmin in group......
解决办法,#export PATH=$PATH:/usr/bin
- cnblogs客户端配置说明
1. 下载地址 http://openlivewriter.org/ 2.安装 安装时设置好blog地址和账户.密码: 到这里基本上就算安装完成了.如果之前的自动配置没有成功,会出现一个界面让你配置b ...
- 小强版之无码理解C语言指针
1. 先从普通变量开始 2. 撸完变量撸指针 3. 故事情节进一步发展,此处少儿不宜 4. 奶茶妹妹捉奸,小强死定了 5. 源码欣赏 #include <stdio.h> ...
- flask中的if __name__ == "__main__"
在编写python文件时,一般会在入口文件中加入if __name__ == "__main__", 这样当这个脚本文件执行时就会执行这个语句下面的内容,而如果这个脚本文件被当作模 ...
- vue mock(模拟后台数据) +axios 简单实例(二)
需装上axios,build文件夹中webpack.dev.conf.js文件添加上vue mock配置的东东, 如,继(一) //组件<template> <div> &l ...
- uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)"解决办法
如果在编译MFC程序的时候出现下列及类似的错误: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator ...
- 完整Highchart JS示例
线性: $.ajax({ type:'post', url:appPages.urlListTjrll, cache:false, data:{year:year,month:month},// // ...
- 20162328蔡文琛 week05 大二
20162328 2017-2018-1 <程序设计与数据结构>第5周学习总结 教材学习内容总结 集合是收集元素并组织其他对象的对象. 集合中的元素一般由加入集合的次序或元素之间的某些固有 ...