Time:2016.08.02
Author:xiaoyimi
转载注明出处谢谢


传送门1
传送门2
思路:
题意大致为
维护有斜率和截距的若干直线,并求直线x=T(T∈N)与当前已加入直线交点的ymaxy_{max}
利用李超线段树的优势区间维护[1,50000]的直线相交情况
新加入直线与线段树节点所存的原直线进行比较,取具有优势区间的直线作为线段树节点所存的新直线,另一直线在相应的区间内继续下放,最多下放log(n)log(n)次
查询时直接比较最大值即可,每次访问log(n)log(n)个节点
总时间复杂度nlog(n)nlog(n)(默认天数与询问次数同一数量级,均为n)
(以上均为个人见解,可能有不对的地方,望大神指正,共同进步)
注意:
好像不用标记??应该是有更优的做法吧,我的code码着码着就不像超哥线段树了
BZOJ跑了648ms
Tyvj在1s左右
代码:

#include<cstdio>
#include<iostream>
#define M 100004
#define inf 1e9
using namespace std;
int n;
char ch;
struct Seg
{double k,b;bool operator ==(const Seg other)const{return k==other.k&&b==other.b;}
}tr[M<<1];
Seg null={0,-inf};
double cal(int T,Seg x){return x.k*T+x.b;}
Seg judge(int T,Seg x,Seg y){return cal(T,x)>=cal(T,y)?x:y;}
void update(int rt,int begin,int end,Seg node)
{Seg f1=judge(begin,tr[rt],node),f2=judge(end,tr[rt],node);if (f1==tr[rt]&&f2==tr[rt]) return;else if (f1==node&&f2==node)tr[rt]=node;else{int mid=begin+end>>1;double p=(node.b-tr[rt].b)/(tr[rt].k-node.k);if (tr[rt].k>=node.k)if (p<=mid)update(rt<<1,begin,mid,node);elseswap(node,tr[rt]),update(rt<<1|1,mid+1,end,node);elseif (p>mid)update(rt<<1|1,mid+1,end,node);elseswap(node,tr[rt]),update(rt<<1,begin,mid,node);}
}
Seg get(int rt,int begin,int end,int T)
{if (begin==end) return tr[rt];Seg p=tr[rt];int mid=begin+end>>1;if (mid>=T) return judge(T,p,get(rt<<1,begin,mid,T));else return judge(T,p,get(rt<<1|1,mid+1,end,T));
}
main()
{scanf("%d",&n);while (n--){ch=getchar();while (ch!='P'&&ch!='Q') ch=getchar();while (getchar()!=' ');if (ch=='P'){double k,b;scanf("%lf%lf",&b,&k);update(1,0,50000-1,(Seg){k,b});}else{int p;scanf("%d",&p);p--;Seg ans=get(1,0,50000-1,p);printf("%d\n",(int)(cal(p,ans)/100));}}
}

【BZOJ1568】【Tyvj3490】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开公司 标记永久化线段树

    维护n条直线,保存斜率和截距. 注意维护的时候分类讨论: 1.两端都大于 2.两端都小于 3.交点在中点左 4.交点在中点右 注: 点数不是询问数 初值 码: #include<iostream ...

  3. 【李超树】李超线段树维护凸包(凸壳) (例题:blue mary开公司+线段游戏+ZZH的旅行)

    文章目录 前言 李超树 引入(斜率优化) 什么是李超树? 李超树活着能干点什么? 算法思想(使用手册?) 插入 查询 模板 判断是否覆盖(优不优) 插入 查询 例题 板题:BlueMary开公司 分析 ...

  4. BZOJ 1568 Blue Mary开公司

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1568 题意:两个操作:(1)添加一条直线y=kx+b:(1<=k<=100) ...

  5. 【BZOJ 1568】【JSOI 2008】Blue Mary开公司

    经典的splay维护凸壳,但是看了看zky学长的题解最后决定写线段树维护标记永久化. Round1考到了这个之后一直没有理解标记永久化,CTSC也因为自己的缺陷丢掉了一些部分分,so sad 看来以后 ...

  6. P4254-[JSOI2008]Blue Mary开公司【李超树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4254 题目大意 要求支持操作 插入一条直线. 询问一个纵坐标最高的在直线上的点. 解题思路 李超树的模板题,大概 ...

  7. 斜率优化之凸包优化与李超线段树

    文章目录 前言 凸包优化 第一步 第二步 最后一步 例一 转移方程 凸包优化 代码 例二 题目大意 转移方程 凸包优化 代码 李超线段树 思想 插入 查询 代码 例三 代码 例四 转移方程 怎么做 代 ...

  8. 数据结构专题-学习笔记:李超线段树

    数据结构专题 - 学习笔记:李超线段树 1. 前言 2. 详解 3. 应用 4. 总结 5. 参考资料 1. 前言 本篇博文是博主学习李超线段树的学习笔记. 2020/12/21 的时候我在 线段树算 ...

  9. 数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission

    文章目录 Robot Product Sum Building Bridges Jump mission Robot BZOJ3938 机器人每次一旦改变速度,直到下一次改变速度为止 这一时间段内机器 ...

最新文章

  1. 电脑录屏工具_屏幕录制工具有哪些?这些录屏软件须知
  2. js ScripX插件打印
  3. openstack中glance组件images的全部python API 汇总
  4. python tqdm_推荐一些实用的的 Python 库
  5. Elasticsearch:Elasticsearch基础上构建推荐引擎 资料收集
  6. java引用类的关键字_java中定义类通常使用的关键字有哪些
  7. Invalidate和postInvalidate
  8. java jdom 设置第1行_Java通过jdom操作生成XML文件的实例代码下载
  9. 丘成桐科学奖计算机类,2017东润丘成桐科学奖计算机参赛指引.PDF
  10. 暑期训练日志----2018.8.22
  11. 什么是REST?以及RESTful的实现
  12. 三层交换机关于VLAN的划分以及ACL的使用
  13. UNIX网络编程读书笔记:原始套接口
  14. python 实现读取图片的像素值。
  15. 如何下载石家庄市卫星地图高清版大图
  16. 公有云、私有云与混合云到底有什么区别?
  17. 网络设置错误造成cluster不能启动(oifcfg setif cluster_interconnect )
  18. C语言程序设计学习笔记:P3-判断
  19. 怎样成为一个PS高手
  20. js(javascript)页面刷新

热门文章

  1. 【奇技淫巧】Android真机调试看不到应用logcat或者应用logcat信息太少的解决方法
  2. Ansible初级应用
  3. 干货下载:可能是你见过的最全的网络爬虫总结
  4. 和华为云一起做件“伟大的事”,24万奖金等你来!
  5. mysql hy093_请问SQLSTATE [HY093]:参数号无效:未定义参数
  6. 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
  7. Think in Java第四版 读书笔记5第11章
  8. Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)
  9. 高等组合学笔记(四): 生成函数应用, Catalan问题
  10. scipy.sparse.csr_matrix函数和coo_matrix函数