https://www.lydsy.com/JudgeOnline/problem.php?id=1568

李超线段树(不会的话去网上搜吧……)。

完。

#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long double dl;
const int N=;
inline dl read(){
dl X=,Y=1.0;int w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=X*+(ch^),ch=getchar();
if(ch=='.'){
ch=getchar();
while(isdigit(ch))X+=(Y/=)*(ch^),ch=getchar();
}
return w?-X:X;
}
struct node{
int l,r;
dl yl,yr;
node(int x1=,dl y1=,int x2=,dl y2=){
l=x1,r=x2;yl=y1,yr=y2;
}
dl k(){return (yr-yl)/(r-l);}
dl point(int x){return l==r?yl:yl+k()*(x-l);}
void lm(int x){yl=point(x),l=x;}
void rm(int x){yr=point(x),r=x;}
}tr[N*];
dl query(int a,int l,int r,int k){
if(l==r)return tr[a].point(k);
int mid=(l+r)>>;dl ans;
if(k<=mid)ans=query(a<<,l,mid,k);
else ans=query(a<<|,mid+,r,k);
return max(ans,tr[a].point(k));
}
void insert(int a,int l,int r,node k){
if(k.l<l)k.lm(l);
if(r<k.r)k.rm(r);
int mid=(l+r)>>;
if(k.point(mid)>tr[a].point(mid))swap(k,tr[a]);
if(min(tr[a].yl,tr[a].yr)>=max(k.yl,k.yr))return;
if(l==r)return;
if(tr[a].k()>k.k())insert(a<<,l,mid,k);
else insert(a<<|,mid+,r,k);
}
char s[];
int main(){
int n=read();
while(n--){
scanf("%s",s);
if(s[]=='Q')printf("%d\n",(int)(query(,,,read())/));
else{
int x0=,x1=;
dl y0=read(),k=read(),y1=k*(x1-x0)+y0;
node p=node(x0,y0,x1,y1);
insert(,,,p);
}
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ1568:[JSOI2008]Blue Mary开公司——题解的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. [BZOJ 1568][JSOI2008]Blue Mary开公司

    [BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...

  9. bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树

    [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1808  Solved: 639[Submit][Sta ...

随机推荐

  1. typescript语法

    先来讲一讲TypeScript出现的背景 前端javascript的编程思想与后端java面向对象的编程思想有很大的不同,微软公司借鉴了coffeescript语言,继承了很多C#和java的编程思想 ...

  2. libevent学习二(Working with an event loop)

    Runing the loop #define EVLOOP_ONCE             0x01 #define EVLOOP_NONBLOCK         0x02 #define EV ...

  3. Android 简介

    一 Android起源 android: 机器人 android是google公司开发的基于Linux2.6的免费开源操作系统 2005 Google收购 Android Inc. 开始 Dalvik ...

  4. Swift使用AVAudioPlayer来调节游戏的背景音乐大小

    音乐文件的声音大小有时在做为游戏背景音乐时会过大,而如果我们只是简单应用SKAudioNode来加载音乐的话,是无法进行声音大小的调节的,因此我们必须使用更强大的AVAudioPlayer来进行声音大 ...

  5. system_Class类说明文档

    system_Class类是FastCMS系统必须的,全局对象system是system_Class的实例,其主要包含二类操作: 1.token 操作: token可以存储当前访客的私有信息,取代se ...

  6. linux c语言 fork() 和 exec 函数的简介和用法

    linux c语言 fork() 和 exec 函数的简介和用法   假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<std ...

  7. Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点

    Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点 一.安装docker 执行代码如下: curl -sSL https://get.daocloud.io ...

  8. 使用 letter-space 后文字不能居中解决

    letter-space:2em; text-align: center; 使用letter-space后和上面的字体对比明显没有居中: 选定元素后发现,每个字后面都被加了2em,不是不能居中而是因为 ...

  9. Debian常用软件

    1. 有道词典 https://github.com/justzx2011/openyoudao

  10. iOS开发UIApplication用法

    1.简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果 ...