【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
【BZOJ1568】[JSOI2008]Blue Mary开公司
Description
Input
Output
题解:样例脑残系列。
我们将每一天看成点,方案看成线段,考虑用线段树维护,对于每个区间,我们记录在这段区间中最优的线段以及区间中点的最大值。如果在这段区间中新加入了一条线段,我们进行讨论:
如果新线段的两端点都比旧线段优,则直接用新线段即可;如果新线段的两端点都不如旧线段优,则直接用旧线段即可;如果新线段的一侧比旧线段优,则我们递归处理下去即可。最后用新线段在两端点处的取值以及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开公司 线段树的更多相关文章
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)
传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...
- BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...
- BZOJ1568: [JSOI2008]Blue Mary开公司
可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...
- P4254 [JSOI2008]Blue Mary开公司 (李超树)
题意:插入一些一次函数线段 每次询问在x = x0处这些线段的最大值 题解:李超树模版题 维护优势线段 注意这题的输入是x=1时的b #include <iostream> #includ ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 557 Solved: 192[Submit ...
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214[Submit ...
随机推荐
- javascript-限制文本框只输入数字
使用onInput()事件 oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过 ...
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛
/* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...
- MySql C++调用库Connector/c++编译 和 接口封装【一】mysql数据库安装
Connector/c++库的源文件编译,你需要先准备好以下工具: mysql数据库(编译时要依赖),boost库,cmake(生成sln工程文件),connector/c++的源文件,vis ...
- opencv3.2 dnn 图像分割
下载 http://dl.caffe.berkeleyvision.org/fcn32s-heavy-pascal.caffemodel 在opencv_contrib-3.2.0/modules/d ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- Qt的窗口的最大化。
1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...
- Linux Vi/Vim 的使用及实例
什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...
- Python学习笔记(一)——基本知识点
主要记录学习Python的历程和用于复习.查阅之用. 知识点: 数据类型(列表.元组.字典.集合) 帮助文档 函数(默认参数.可变参数.关键字参数.参数组合) 数据类型: 列表:list ...
- About {DynamicResource {x:Static SystemColors.ControlBrushKey}}
from : http://blog.sina.com.cn/s/blog_749e42850100sahi.html 前提: <system:String x:Key="{Compo ...
- Neo4j简单的样例
系统环境: Ubuntu 04.10 x64 一:安装 下载最新版:neo4j-community-2.2.3-unix.tar.gz 解压 cd neo4j-community-2.2.3/bin ...