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

题面

BZOJ

洛谷

题解

是模板题啊。

#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开公司(李超线段树)的更多相关文章

  1. [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树

    题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...

  2. 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)

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

  3. 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)

    传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...

  4. JSOI2008 Blue Mary开公司 | 李超线段树学习笔记

    题目链接:戳我 这相当于是一个李超线段树的模板qwqwq,题解就不多说了. 代码如下: #include<iostream> #include<cstdio> #include ...

  5. BZOJ.1568.[JSOI2008]Blue Mary开公司(李超线段树)

    题目链接 线段树每个节点记录\(f(mid)\)最大的直线(在\(mid\)处函数值最大的直线),称作优势线段(还是直线啊...无所谓了). 如果是在区间插入线段会影响\(O(\log n)\)个区间 ...

  6. [JSOI2008]Blue Mary开公司[李超线段树]

    题面 bzoj luogu 好久以前听lxl讲过 咕掉了.. 竟然又遇到了 安利blog #include <cmath> #include <cstring> #includ ...

  7. BZOJ-1568: Blue Mary开公司 (李超线段树)

    Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“Project”. 若单词为Query,则后接一个整数T,表示Blue ...

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

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

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

    可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...

  10. BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】

    Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...

随机推荐

  1. semantic-ui 输入框

    1.标准输入框 semantic-ui中定义输入框需要将input标签包含于另外一个标签内,外层标签的class为ui input,注意外层标签可以是div,span.p.i. <div cla ...

  2. C# Note30: 网络爬虫

    用C#实现网络爬虫(一) 用C#实现网络爬虫(二) 基于C#.NET的高端智能化网络爬虫(一)(反爬虫哥必看) 基于C#.NET的高端智能化网络爬虫(二)(攻破携程网) C#获取网页内容的三种方式

  3. npm install、npm install --save、npm install --save --dev、npm install -S、npm install -D的区别

    npm install X: 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X –sav ...

  4. django rest framework批量上传图片及导入字段

    一.项目需求 批量上传图片,然后批量导入(使用excel)每个图片对应的属性(属性共十个,即对应十个字段,其中外键三个). 二.问题 一次可能上传成百上千张图片和对应字段,原来数据库的设计我将图片和对 ...

  5. kibana——es的批量操作

    一·_mget: 1.创建的索引如下: 2.批量查询: #查询两个 GET _mget { "docs":[ { "_index":"testdb&q ...

  6. linux中$1的意思

    $1 在shell中成为“位置参数”,表示传入的第一个参数.在shell脚本主体中,表示shell脚本的第一个参数.用在shell脚本函数里时,表示的是函数的第一个入参.

  7. 使用kubeadm安装kubenetes

    一.环境 关闭防火墙和selinux 禁用swap master节点安装 #1.配置源 cd /etc/yum.repos.d/wget https://mirrors.aliyun.com/dock ...

  8. 集合之HashMap(含JDK1.8源码分析)

    一.前言 之前的List,讲了ArrayList.LinkedList,反映的是两种思想: (1)ArrayList以数组形式实现,顺序插入.查找快,插入.删除较慢 (2)LinkedList以链表形 ...

  9. idea 通过命令操作git

    关于如何把git(远程)端项目拉取到idea端的操作可以观看:https://blog.csdn.net/autfish/article/details/52513465 在本地向远程提交文件git ...

  10. Windows & RabbitMQ:集群(clustering) & 高可用(HA)

    描述:我们需要配置三台服务器:ServerA, ServerB, ServerC 注意事项: 所有的服务器的Erlang版本,RabbitMQ版本必须一样 服务器名大小写敏感 Step 1:安装Rab ...