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 ...
随机推荐
- python数据结构之快速排序
def quick_sort(nums): if not nums: return [] else: # 这里取第0个数为基点 flag = nums[0] # 小于flag 的放到左边 left = ...
- Jmeter+ant
1.下载 ant,解压到非中文目录,并配置环境变量,不会的自行 google 2.将 jmeter 中 extras 子目录里的 ant-jmeter-1.1.1.jar 复制到 ant 中的 lib ...
- Shell 编程综合案例
Shell编程综合案例 Shell也学习了大概的知识,现在这篇文章就大概讲述下如何使用shell编写一个脚本呢?下面就展示一个大家常用的数据库备份案例来进行展示. 需求分析 1)每天凌晨2:10分备份 ...
- vue 单元素过渡
demo <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- delphi xe10 手机内部系统相关操作(手机信息、震动、剪贴板、键盘、电话、拨号)
//获取手机信息 function GetPhoneInfo(): string; Var TelephonyManager: JTelephonyManager; TelephonyServiceN ...
- java 直接调用micorosoft office (2003-2007和2010版本)中excel中计算函数
主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx 读取excel和MySQL相关: java的poi技 ...
- Spring-Security (学习记录一)--登录
目录 创建maven工程 1. 在pom.xml中加入相关jar包的配置 2.添加spring-security.xml文件 3.新建admin和user文件夹 4.配置web.xml文件 5.访问 ...
- Python中将dict转换为kwargs
Python中将dict转换为kwargs 我们都知道kwargs是变长kv参数,能否将dict转换成kwargs. 在python调用函数的时候func(**{'type'='event'}),可以 ...
- mac 安装配置使用 mongoldb
mac 安装配置使用 mongoldb 安装和配置 brew install mongos brew install mongo # 密码就是用户的密码 # 配置数据文件 //如果不配置会出现错误62 ...
- webpack3
6月20号webpack推出了3.0版本,官方也发布了公告.根据公告介绍,webpack团队将未来版本的改动聚焦在社区提出的功能需求,同时将保持一个快速.稳定的发布节奏.本文主要依据公告内容,简单介绍 ...