题意:P:加入一条一次函数。Q:询问x位置的最大函数值。

标程:

 #include<bits/stdc++.h>
using namespace std;
const int N=;
int q,x,n;
double Tk[N],Tb[N],b,k,ans;
char s[];
void add(int x,int l,int r,double b,double k)
{
if (!Tk[x]&&!Tb[x]) {Tk[x]=k;Tb[x]=b;return;}
double fl1=Tk[x]*l+Tb[x],fl2=k*l+b;
double fr1=Tk[x]*r+Tb[x],fr2=k*r+b;
if (fl1>=fl2&&fr1>=fr2) return;
if (fl1<fl2&&fr1<fr2) {Tk[x]=k;Tb[x]=b;return;}
double dot=(double)(Tb[x]-b)/(k-Tk[x]);int mid=(l+r)>>;
if (k<Tk[x])
{
if (dot<=mid) add(x<<,l,mid,b,k);
else add(x<<|,mid+,r,Tb[x],Tk[x]),Tk[x]=k,Tb[x]=b;
}else
{
if (dot<=mid) add(x<<,l,mid,Tb[x],Tk[x]),Tk[x]=k,Tb[x]=b;
else add(x<<|,mid+,r,b,k);
}
}
void qry(int k,int l,int r,int x)
{
ans=max(ans,Tk[k]*x+Tb[k]);
if (l==r) return;
int mid=(l+r)>>;
if (x<=mid) qry(k<<,l,mid,x);else qry(k<<|,mid+,r,x);
}
int main()
{
int T;scanf("%d",&T);
n=;//看清范围!
while (T--)
{
scanf("%s",s);
if (s[]=='P')
{
scanf("%lf%lf",&b,&k);
add(,,n,b-k,k);
}else {
scanf("%d",&x);ans=;
qry(,,n,x);
printf("%d\n",(int)(ans/100.0));
}
}
return ;
}

题解:李超树

李超树的一个特点是标记永久化。可以求解有关直线、线段、折线的一系列问题。

每个区间[l,r]保存在x=mid时最高的一条直线。

插入:分类讨论斜率的大小关系和当前区间直线和插入直线的交点。

设Tk为当前区间直线的斜率,k为插入直线的斜率。当Tk>k时,如果交点在mid左边,那么处理左区间插入直线,右区间不变;如果交点在mid右边,那么Tk=k,左区间被插入直线完全覆盖,处理右区间原区间直线。Tk<k的情况同理。

查询:路径上直线的最大值。

时间复杂度O(nlogn)。

bzoj1568 Blue Mary的更多相关文章

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

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

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

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

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

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

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

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 557  Solved: 192[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开公司【李超树】

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

  7. bzoj1567: [JSOI2008]Blue Mary的战役地图

    将矩阵hash.s[0]忘了弄成0,输出中间过程发现了. hash.sort.判重.大概这样子的步骤吧. #include<cstdio> #include<cstring> ...

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

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

  9. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

随机推荐

  1. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题

    1. 为什么会失去? vuex可以看成是一个"提升变量"的一个工具,它是将state当做全局变量存储.F5刷新页面之后自然随着页面的刷新重新初始化state. 2. 如果解决数据保 ...

  2. 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)

    上一篇,多开方法,适用于一年前的版本 http://www.cnblogs.com/suanguade/p/5646776.html 前言: 一转眼一年过去了,日子越来越无聊了,于是,准备再玩一玩梦幻 ...

  3. troff - groff 文档排版系统的 troff 处理器

    总览 SYNOPSIS troff [ -abcivzCERU ] [ -d cs ] [ -f fam ] [ -F dir ] [ -m name ] [ -M dir ] [ -n num ] ...

  4. Python学习笔记(七)——魔法方法

    1.构造和析造 魔法方法就是被双下划线包围的方法 __init__()方法 __init__方法默认没有参数,返回值为none.类实例化对象需有明确的初始化步骤要重写函数 >>> c ...

  5. 日文NLP分词系统

    mecab(http://mecab.sourceforge.net/)是奈良先端科技大学开发的日文分词系统,基于CRF的分词原理,有c++实现,提供python.perl.ruby等接口 日文NLP ...

  6. Vue.js 复选框

    demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  7. Centos6.5 安装 LAMP

    Centos 安装 LAMP 系统: Centos 6.5 Apache 2.4 + PHP 7.2 + Mysql 5.7 准备工作 centos 查看版本 查看 centos版本 How to C ...

  8. 关于synchronized和Lock

    原文链接:关于volatile关键字解析,synchronized和Lock参考 深入浅出,解释的非常清楚,有条理~~~ 以下为转载内容: Java并发编程:volatile关键字解析 volatil ...

  9. C++——函数模板和类模板

    声明: //template 关键字告诉C++编译器 我要开始泛型了.你不要随便报错 //数据类型T 参数化数据类型 template <typename T> void myswap(T ...

  10. 移动端多选插件-jquery

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...