【BZOJ1568】[JSOI2008]Blue Mary开公司

Description

Input

第一行 :一个整数N ,表示方案和询问的总数。 
接下来N行,每行开头一个单词“Query”或“Project”。 
若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。 
若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。
1 <= N <= 100000 1 <= T <=50000 0 < P < 100,| S | <= 10^6 
提示:本题读写数据量可能相当巨大,请选手注意选择高效的文件读写方式。

Output

对于每一个Query,输出一个整数,表示询问的答案,并精确到整百元(以百元为单位,
例如:该天最大收益为210或290时,均应该输出2)。没有方案时回答询问要输出0

题解:样例脑残系列。

我们将每一天看成点,方案看成线段,考虑用线段树维护,对于每个区间,我们记录在这段区间中最优的线段以及区间中点的最大值。如果在这段区间中新加入了一条线段,我们进行讨论:

如果新线段的两端点都比旧线段优,则直接用新线段即可;如果新线段的两端点都不如旧线段优,则直接用旧线段即可;如果新线段的一侧比旧线段优,则我们递归处理下去即可。最后用新线段在两端点处的取值以及lson和rson的最值来更新区间最值即可。

时间复杂度$O(nlogn)$

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#define lson x<<1
#define rson x<<1|1
using namespace std;
const int maxn=100010;
const int N=50000;
int n;
double sa[N<<2],sb[N<<2];
char str[10];
void updata(int l,int r,int x,double a,double b)
{
int mid=(l+r)>>1;
if(sa[x]*l+sb[x]<a*l+b&&sa[x]*r+sb[x]<a*r+b) sa[x]=a,sb[x]=b;
else if(sa[x]*l+sb[x]<a*l+b||sa[x]*r+sb[x]<a*r+b) updata(l,mid,lson,a,b),updata(mid+1,r,rson,a,b);
}
double query(int l,int r,int x,int a)
{
int mid=(l+r)>>1;
double ret=a*sa[x]+sb[x];
if(l==r) return ret;
if(a<=mid) ret=max(ret,query(l,mid,lson,a));
else ret=max(ret,query(mid+1,r,rson,a));
return ret;
}
int main()
{
scanf("%d",&n);
int c;
double a,b;
while(n--)
{
scanf("%s",str);
if(str[0]=='Q') scanf("%d",&c),printf("%d\n",int(floor(query(1,N,1,c)/100)));
else scanf("%lf%lf",&a,&b),updata(1,N,1,b,a-b);
}
return 0;
}

【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. P4254 [JSOI2008]Blue Mary开公司 (李超树)

    题意:插入一些一次函数线段 每次询问在x = x0处这些线段的最大值 题解:李超树模版题 维护优势线段 注意这题的输入是x=1时的b #include <iostream> #includ ...

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

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

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

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

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

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

随机推荐

  1. 常用的百度API地图操作

    常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167

  2. WPF教程四:布局之DockPanel面板

    DockPanel:停靠面板 DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中.停靠面板类似于WinForm中控件的Dock属性.D ...

  3. Java中上传文件和表单数据提交如何保持数据的一致性?

    学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性. 将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制 ...

  4. Ajax类

    ajax.js -------------------------[ajax类]-------------------------- function Ajax(recvType){ var aj=n ...

  5. java-基于JavaMail的Java邮件发送

    1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

  6. absolute绝对定位的非绝对定位用法

    总结: position为absolute的元素如果没有设置left, top等值与left:0;top:0;的的效果是不一样的.例如一个div中有个absolute属性元素,其没有left或是top ...

  7. TensorFlow基础笔记(15) 编译TensorFlow.so,提供给C++平台调用

    参考 http://blog.csdn.net/rockingdingo/article/details/75452711 https://www.cnblogs.com/hrlnw/p/700764 ...

  8. (转)使用AfxGetMainWnd函数的一个心得

    作者:朱金灿 来源:http://blog.csdn.net/clever101/ 使用AfxGetMainWnd函数获取MFC程序中的主框架类指针是一个常用作法.但是你会发现这一做法有时也会失灵.不 ...

  9. 【Android实战】Android中处理崩溃异常

    public class MainActivity extends ActionBarActivity { public CrashApplication application; @Override ...

  10. erlang随机数问题

    一.计算机的随机数的老问题,伪随机数. random:seed() random:uniform(N) 如果seed是相同的,则第M次执行 random:uniform(N) .M.N相同,则得到的随 ...