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\) ...
 
随机推荐
- java并发编程——并发容器
			
概述 java cocurrent包提供了很多并发容器,在提供并发控制的前提下,通过优化,提升性能.本文主要讨论常见的并发容器的实现机制和绝妙之处,但并不会对所有实现细节面面俱到. 为什么JUC需要提 ...
 - zabbix4.0LTS安装配置
			
一.环境准备 1.最小化安装centos7.5系统 2.安装常用软件包 yum install -y net-tools vim bash-completion 3.关闭selinux和修改主机名 v ...
 - .NetCore mvc Ajax Post数据到后端
			
在前端页面中,如果没有表单,想把复杂对象提交到后端,可使用以下方法 后端Controller中定义以下方法: [HttpPost] public int AddSolution([FromBody]S ...
 - python json模块使用详情
			
python其他知识目录 #json.数据交换用到json文件.json是特殊的字符串.访问网站,返回的就是json 1.json简介: 定义:JSON(JavaScript Object Notat ...
 - alias命令详情
			
基础命令学习目录首页 原文链接:http://c.biancheng.net/view/938.html 给命令设置别名,你可以把它当作命令的"小名",但是这样做有什么意义呢? 比 ...
 - type命令详解
			
转自:http://codingstandards.iteye.com/blog/831504 在脚本中type可用于检查命令或函数是否存在,存在返回0,表示成功:不存在返回正值,表示不成功. $ t ...
 - MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
			
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
 - “Hello World!”团队第六周第七次会议
			
博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.checkout&push代码 一.会议时间 2017年11月23日 ...
 - Daily Scrum (2015/11/3)
			
今天我们的爬虫能在pc上成功运行并且把所爬取的数据存到服务器上了!我们已经搭建好数据库,把相关信息存到数据库中,并把数据存到D盘里共享给数据处理小组使用. 成员 今日工作 时间 明日工作 符美潇 完成 ...
 - JAVA第一次实验 ——凯撒密码的实现
			
JAVA实验一 编写程序实现凯撒密码 201352330 潘俊洋 一.实验说明 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加 ...