【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
题面
题解
是模板题啊。
#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 50050
#define lson (now<<1)
#define rson (now<<1|1)
int Q,n=50000;char ch[20];
struct Node{bool fl;double k,b;}t[MAX<<2];
void Modify(int now,int l,int r,double K,double B)
{
if(!t[now].fl){t[now].fl=true,t[now].k=K;t[now].b=B;return;}
int mid=(l+r)>>1;
double l1=l*K+B,r1=r*K+B;
double l2=l*t[now].k+t[now].b,r2=r*t[now].k+t[now].b;
if(l1<=l2&&r1<=r2)return;
if(l1>l2&&r1>r2){t[now].k=K;t[now].b=B;return;}
double x=(B-t[now].b)/(t[now].k-K);
if(l1>l2)
{
if(x>mid)Modify(rson,mid+1,r,t[now].k,t[now].b),t[now].k=K,t[now].b=B;
else Modify(lson,l,mid,K,B);
}
else
{
if(x>mid)Modify(rson,mid+1,r,K,B);
else Modify(lson,l,mid,t[now].k,t[now].b),t[now].k=K,t[now].b=B;
}
}
double Query(int now,int l,int r,int x)
{
if(l==r)return t[now].k*x+t[now].b;
int mid=(l+r)>>1;double ret=t[now].k*x+t[now].b;
if(x<=mid)ret=max(ret,Query(lson,l,mid,x));
else ret=max(ret,Query(rson,mid+1,r,x));
return ret;
}
int main()
{
scanf("%d",&Q);
while(Q--)
{
scanf("%s",ch);
if(ch[0]=='P')
{
double K,B;scanf("%lf%lf",&B,&K);
Modify(1,1,n,K,B-K);
}
else
{
int x;scanf("%d",&x);
double ans=Query(1,1,n,x);
printf("%lld\n",(long long)(ans/100));
}
}
return 0;
}
【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)的更多相关文章
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 557 Solved: 192[Submit ...
- 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)
传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...
- JSOI2008 Blue Mary开公司 | 李超线段树学习笔记
题目链接:戳我 这相当于是一个李超线段树的模板qwqwq,题解就不多说了. 代码如下: #include<iostream> #include<cstdio> #include ...
- BZOJ.1568.[JSOI2008]Blue Mary开公司(李超线段树)
题目链接 线段树每个节点记录\(f(mid)\)最大的直线(在\(mid\)处函数值最大的直线),称作优势线段(还是直线啊...无所谓了). 如果是在区间插入线段会影响\(O(\log n)\)个区间 ...
- [JSOI2008]Blue Mary开公司[李超线段树]
题面 bzoj luogu 好久以前听lxl讲过 咕掉了.. 竟然又遇到了 安利blog #include <cmath> #include <cstring> #includ ...
- BZOJ-1568: Blue Mary开公司 (李超线段树)
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“Project”. 若单词为Query,则后接一个整数T,表示Blue ...
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- BZOJ1568: [JSOI2008]Blue Mary开公司
可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...
- BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...
随机推荐
- html总结:固定表格中单元格宽度
当然要提前设置好table的width值,然后再写这个,使得每列宽度都相等. <style> table { table-layout: fixed; } </style>
- 局域网 服务器 https
局域网内搭建一个服务器,可以使用 https 吗 - V2EXhttps://www.v2ex.com/t/472394 局域网内多台机器使用自签发证书架设https网站二:实施 - 左直拳的马桶_日 ...
- MYSQL: 1292 - Truncated incorrect DOUBLE value: '184B3C0A-C411-47F7-BE45-CE7C0818F420'
MySQL Bugs: #63112: Truncated incorrect DOUBLE valuehttps://bugs.mysql.com/bug.php?id=63112 Error Co ...
- PHP之位运算符
使用场景: 1) 判断奇数偶数 ; $i < ; $i++) { ){ echo $i.PHP_EOL; } } //输出所有奇数 2)快速修改状态 $status1 = ; $status2 ...
- java代理:静态代理和动态代理
一.Java中有一个设计模式是代理模式 代理模式是常用的Java设计模式,特征是代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类 ...
- Microsoft Visual Studio Ultimate 2013密钥
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥): ...
- redis 的简单命令
以下实例讲解了如何启动 redis 客户端: 启动 redis 客户端,打开终端并输入命令 redis-cli.该命令会连接本地的 redis 服务. $redis-cli redis > re ...
- qtp 自动化测试--点滴 自定义显示工具菜单 trzedit
tools-customize-toolbars-勾选后关闭 2 trzedit 使用winobject 方法取值 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.") ...
- LODOP用ADD_PRINT_IMAGE语句缩放打印图片
LODOP提高输出图片质量的方法:1.用ADD_PRINT_IMAGE语句打印图片,而且img元素的width和height属性要去掉或者设置足够大,这样就可以让下载引擎传给Lodop图片质量足够好; ...
- ADO.NET工具类(三)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...