bzoj1568 Blue Mary
题意: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的更多相关文章
- BZOJ-1568: Blue Mary开公司 (李超线段树)
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“Project”. 若单词为Query,则后接一个整数T,表示Blue ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
[BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“P ...
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 557 Solved: 192[Submit ...
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...
- bzoj1567: [JSOI2008]Blue Mary的战役地图
将矩阵hash.s[0]忘了弄成0,输出中间过程发现了. hash.sort.判重.大概这样子的步骤吧. #include<cstdio> #include<cstring> ...
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214[Submit ...
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...
随机推荐
- hadoop命令行
持续更新中................ 1. 设置目录配额 命令:hadoop dfsadmin -setSpaceQuota 样例:hadoop dfsadmin -setSpaceQuota ...
- JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化
这种用法包括前端和后端: 前端: 1. 转化为JSON对象方便操作 var jsonObj = JSON.parse(str); 得到的是一个json数组对象,可以通过 for (var p in j ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- 根据不同运行环境配置和组织node.js应用
安装node-config模块 npm install config --save || yarn add config mkidr config // 创建config文件夹 在config文件夹下 ...
- C语言结构体注意点
#include <stdio.h> int main() { /*************************************************** *定义结构体变量的 ...
- Kettle使用kettle.properties
kettle.properties 是一个变量文件,这个文件我使用的最多的地方是保存 “数据库连接” 用户名和密码. 如果不用这个文件,那么使用“数据库连接”时,需要硬编码写到文件里. 有一天dba告 ...
- 21-7-数组相关api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DEV插件下的控件Grid和Gridlookupedit控件的结合使用
创建GridlookupEtid控件 设置其对应属性: 设置属性 this.gridLookUpEdit1.Properties.TextEditStyle = DevExpress.XtraEdit ...
- WPF RichTextBox 当前光标后一个字符是文档的第几个字符
WPF RichTextBox 当前光标后一个字符是文档的第几个字符 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-05 参考: TextP ...
- leetcode-159周赛-5232-替换子串得到平衡字符串*
题目描述: 方法: 另: class Solution: def balancedString(self, s: str) -> int: n, req = len(s), len(s) // ...