http://www.lydsy.com/JudgeOnline/problem.php?id=1568 (题目链接)

题意

  在线维护若干条直线,询问一些横坐标上的最高直线的纵坐标。

Solution

  超哥线段树=  =。可以说是标记可持久化的一个好的应用吧。

  线段树上一个节点为一个容器,可以存放一条直线。考虑插入一条直线时,当找到要插入的区间节点时,如果这个节点的容器没东西则将这条直线直接放在这个节点的容器中。否则和容器中的线段比较,保留较高部分较多的直线,将另一条直线作为新的插入直线往左儿子或者右儿子递归处理,最后到叶子节点直接比较即可。

  这样一次插入,在线段树上最多覆盖满$log$个区间,每个区间递归下去$log$层。查询时间复杂度为一个$log$。时间复杂度为$O(nlog^2n)$

细节

  记得各种eps。

代码

// bzoj1568
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf (1ll<<60)
#define eps 1e-8
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std; const int lim=50000,maxn=100010;
int n;
char ch[100]; struct seg {
double k,b;
double ch(int x) {return k*x+b;}
}t;
struct node {int cov;seg mx;}tr[maxn<<2]; double X(seg a,seg b) {
return fabs(a.k-b.k)<eps ? inf : (a.b-b.b)/(b.k-a.k);
}
void insert(int k,int l,int r,seg g) {
int mid=(l+r)>>1;
if (!tr[k].cov) tr[k].cov=1,tr[k].mx=g;
else {
seg a1=g,a2=tr[k].mx;double x=X(a1,a2);
if (a1.ch(l)<a2.ch(l) || (fabs(a1.ch(l)-a2.ch(l))<eps && a1.k<a2.k)) swap(a1,a2);
if (x<=l || x>=r) {tr[k].mx=a1;return;}
if (x<=mid) tr[k].mx=a2,insert(k<<1,l,mid,a1);
else tr[k].mx=a1,insert(k<<1|1,mid+1,r,a2);
}
}
double query(int k,int l,int r,int x) {
if (l==r) return tr[k].cov ? tr[k].mx.ch(x) : 0;
int mid=(l+r)>>1;double t;
if (x<=mid) t=query(k<<1,l,mid,x);
else t=query(k<<1|1,mid+1,r,x);
return tr[k].cov ? max(t,tr[k].mx.ch(x)) : t;
} int main() {
scanf("%d",&n);
for (int x,i=1;i<=n;i++) {
scanf("%s",ch);
if (ch[0]=='P') scanf("%lf%lf",&t.b,&t.k),insert(1,0,lim,t);
if (ch[0]=='Q') scanf("%d",&x),printf("%lld\n",(LL)query(1,0,lim,x-1)/100);
}
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. BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】

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

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

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

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

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

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

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

  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】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 ...

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

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

随机推荐

  1. NTP服务部署和测试

    1. 概述2. 部署3. 配置4. 客户端配置4.1 客户端安装ntpdate4.2 同步设置 1. 概述 本篇博客主要记录如何部署一台NTP服务器,用于内网时间同步. 时间服务器对于集群内部节点之间 ...

  2. 重建索引解决mssql表查询超时的问题

    表已有数据,150万+,执行一个group by 的查询出现超时,一个一个条件减少尝试,前几个where条件不超时,而在加上最后一个条件时就超时了. 分析表的索引建立情况:DBCC showconti ...

  3. tomcat内存溢出问题记录

    问题说明:公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: [root@redmine logs]# tail -f /srv ...

  4. 个人作业——final

    一 . 对M1M2的一个总结 我特别感谢我们组的PM.以前我觉得女生学计算机这个专业,跟男生比差太远了.总觉得我们女生就是上上课写写作业考考试还行,但是一到开发什么项目啊,实战之类的,总觉得自己的能力 ...

  5. 【CV】ICCV2015_Unsupervised Visual Representation Learning by Context Prediction

    Unsupervised Visual Representation Learning by Context Prediction Note here: it's a learning note on ...

  6. Daily Scrumming* 2015.12.20(Day 12)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1090 https://github.com/buaaclubs-team/temp-front/com ...

  7. ml-模型评估与选择

    1.基本概念 错误率E=分类错误的样本数a/总样本数m:精度=1-a/m 经验误差/训练误差:在训练集上产生的 泛化误差:在测试集上产生的=====>要把这个泛化误差降到最小化. 2.评估方法 ...

  8. SSH框架开发蛋糕房管理系统之质量属性

    SSH框架开发蛋糕房管理系统之质量属性 我要开发的系统是基于ssh框架的蛋糕房管理系统.本系统前台提供的主要功能是在线预定蛋糕,本店管理员拥有最高权限,包括收银管理,设备管理,日常销售管理,蛋糕定制管 ...

  9. spring播放器详细设计说明书(一)

    1 引言 1.1编写目的 编写目的是详细说明SPRING音乐播放器的设计使用,预期读者对象为在个人电脑上需要使用简单音乐播放器的用户.1.2项目背景  说明: a.待开发软件系统的名称为SPRING音 ...

  10. “数学口袋精灵”第二个Sprint计划(第六~八天)

    “数学口袋精灵”第二个Sprint计划----第六天~第八天进度 任务分配: 冯美欣:欢迎界面的背景音乐完善 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:代码算法设计 第六天: 进度: 冯美欣 ...