题意: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. chrony实现局域网时间同步

    chrony基于cs架构实现,配置一台服务主机与其他客户主机即可 服务端 #yum install chrony --RHEL7默认已安装chrony,而没有安装ntpd. #systemctl st ...

  2. cdh5.47 上配置flume

    flume 配置文件 # Define a memory channel called ch1 on agent1agent1.channels.ch1.type = memoryagent1.cha ...

  3. pymysql连接mysql报错

    pymysql模块操作数据库及连接报错解决方法   import pymysql sql = "select host,user,password from user" #想要执行 ...

  4. 十分钟学习 react配套的类型检测库——prop-types的运用

    js 有时在定义变量的类型为number 或string 时并不会报错,所以prop-types 是专门用来检测react ,以前的版本是把它放到react架构里面 ,现在作为一个独立的库搬出来了,跟 ...

  5. php的生命周期的概述

    1. PHP是随着WEB服务器(apache)的启动而运行的: 2. PHP通过mod_php5.so()模块和服务器(apache)相连 3. PHP总共有三个模块:内核.Zend引擎.以及扩展层: ...

  6. 使用promise构建一个向服务器异步数据请求

    function getJSON(Url){ return new Promise((resolve,reject)=>{ request= new XMLHttpRequest(); requ ...

  7. 21-6-数组相关api

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. C#跨线程访问(二)----thread参数、回调传参数

    一.单个参数(封箱也可实现多参数) class B  {      public static void Main()      {          Thread t = new Thread(ne ...

  9. 笔记54 Mybatis快速入门(五)

    Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...

  10. Saks就const解释

    In my last column, I discussed one of the reasons why the rules by which a compiler can place data i ...