UOJ#191. 【集训队互测2016】Unknown
题意:维护一个数列,每个元素是个二维向量,每次可以在后面加一个元素或者删除一个元素。给定P(x,y),询问对于[l,r]区间内的元素$S_i$,$S_i \times P$的最大值是多少。
首先简单地推出类似斜率优化的式子,那么我们需要在凸包上二分。
学习了一下这份代码http://uoj.ac/submission/69959
使用线段树按下标维护凸包。那么这里有一个问题,如果按照传统的写法,合并一次的复杂度是与$O(区间长度)$的,这样会导致单次插入/删除的时间复杂度变为$O(n)$,是不能接受的。
注意到与普通的线段树不一样的是,这个只会从后面添加元素,所以一个区间只有被填满了以后才需要询问,进而我们可以只在这个区间被填满了以后再合并,但是单次操作的最坏时间复杂度仍是$O(n)$。
考虑是什么样的操作使上面的复杂度变成$O(n)$的呢:在某个较长的区间的右端点附近来回插入删除,每当它满了就会合并一个,删除再插入一个又会满。
于是我们考虑,在这个区间刚满的时候不合并这个区间,而是等到同层的下一个区间也填满的时候再合并这个区间。
这样一旦一个结点花费$O(L)$的时间合并后,至少$O(L)$次操作才会使它再次合并,所以每层单个操作的均摊时间复杂度为$O(1)$,共$\log$层,单个操作的均摊时间复杂度为$O(\log n)$.
但是这样做的话,当一个结点被询问区间完全包含的时候我们并不一定直接使用这个结点的信息,因为它还没有合并。我们只能继续递归它的儿子,直到发现合并过的节点才能返回答案。
那么一共会用到多少个区间的信息呢?我们知道线段树区间查询会落在$O(\log n)$个区间上,由于每层只有最后一个区间没有合并,所以这$O(\log n)$个区间里只有最右边的区间最多会放在$\log$个子区间上,其他的最多放在2个子区间上,所以总共仍然会落在$O(\log n)$个区间上。
这个题需要在凸包上二分,所以单次询问时间复杂度是$O(\log^2 n)$,总时间复杂度$O(n\log^2 n)$,空间复杂度$O(n\log n)$.
【notice】
如果线段树的长度是2的整次幂,可以开头给出的链接那样的写法。如果不是,需要像下面的代码这么写(叶子节点不能合并)。
【code】
http://uoj.ac/submission/77261
存了下斜率后面的点就MLE了。。http://uoj.ac/submission/77384
UOJ#191. 【集训队互测2016】Unknown的更多相关文章
- UOJ#191. 【集训队互测2016】Unknown 点分治 分治 整体二分 凸包 计算几何
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ191.html 题目传送门 - UOJ191 题意 自行移步集训队论文2016中罗哲正的论文. 题解 自行 ...
- uoj #190. 【集训队互测2016】消失的源代码 提交答案题
Test 1: 发现是一个字母表的映射 把 \('a' \to 'z'\) 打进去找出映射就好了QAQ . Test 2: 求助 \(dalao\) 得知的点.. 答案是 : \(2016x^2 + ...
- 【loj2461】【2018集训队互测Day 1】完美的队列
#2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...
- 【2018集训队互测】【XSY3372】取石子
题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...
- 洛谷 P4463 - [集训队互测 2012] calc(多项式)
题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出 ...
- 【uoj#94】【集训队互测2015】胡策的统计(集合幂级数)
题目传送门:http://uoj.ac/problem/94 这是一道集合幂级数的入门题目.我们先考虑求出每个点集的连通生成子图个数,记为$g_S$,再记$h_S$为点集$S$的生成子图个数,容易发现 ...
- 【集训队互测2015】Robot
题目描述 http://uoj.ac/problem/88 题解 维护两颗线段树,维护最大值和最小值,因为每次只有单点查询,所以可以直接在区间插入线段就可以了. 注意卡常,不要写STL,用链表把同类修 ...
- LOJ3069. 「2019 集训队互测 Day 1」整点计数(min_25筛)
题目链接 https://loj.ac/problem/3069 题解 复数真神奇. 一句话题意:令 \(f(x)\) 表示以原点 \((0, 0)\) 为圆心,半径为 \(x\) 的圆上的整点数量, ...
- BZOJ3938 & UOJ88:[集训队互测2015]Robot——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3938 http://uoj.ac/problem/88 小q有n只机器人,一开始他把机器人放在了一 ...
随机推荐
- css清除浮动的几种方法整理
四种清除浮动方法如下: 1.使用空标签清除浮动.空标签可以是div标签,也可以是P 标签.这种方式是在需要清除浮动的父级元素内部的所有浮动元素后添加这样一个标签 清除浮动,并为其定义CSS代码:cle ...
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- DRUID连接池的简单使用
DRUID——为监控而生的DB池 1. DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监 ...
- asp.net 简单实现禁用或启用页面中的某一类型的控件
我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交.这样很容易造成不必要的麻烦甚至是错误.说了这么多,其实就是要实现一个禁用某些控件的一种功能.好 ...
- Android 获得屏幕的宽高度
在View构造函数中获得屏幕的宽高 public class GameView extends View { public GameView(Context context) { Display d ...
- ElasticSearch大数据分布式弹性搜索引擎使用—从0到1
阅读目录: 背景 安装 查找.下载rpm包 .执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到elasticsearch专属账户测试能否成 ...
- Linux改变进程优先级的nice命令
前言: VPS普遍性能不高,很多人可能有这样一个感受,在执行du.tar等命令时,会造成系统负载飙升,Apache响应缓慢.这时nice命令改变进程优先级可能能缓解这种状况.nice命令用于调整Lin ...
- URAL1036. Lucky Tickets
链接 dp[i][j] += dp[i-1][j-g];背包吧 数据太大了 还是JAVA好用 import java.io.*; import java.math.*; import java.tex ...
- VM8下安装Mac OS X 10.7
下载Mac OS X 10.7 安装包http://115.com/file/clj1iu8m# 下载HJMac http://115.com/file/cljyu1rh# ...
- Go语言程序的状态监控 via 达达
Go语言程序的状态监控 Go是很实在的编程语言,从一开始就提供了很详细的运行状态信息.产品上线后的调优和排查疑难杂症都得靠这些状态信息.这边总结一些我们项目里用到的状态监控手段. pprof Go自带 ...