题意:维护一个数列,每个元素是个二维向量,每次可以在后面加一个元素或者删除一个元素。给定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的更多相关文章

  1. UOJ#191. 【集训队互测2016】Unknown 点分治 分治 整体二分 凸包 计算几何

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ191.html 题目传送门 - UOJ191 题意 自行移步集训队论文2016中罗哲正的论文. 题解 自行 ...

  2. uoj #190. 【集训队互测2016】消失的源代码 提交答案题

    Test 1: 发现是一个字母表的映射 把 \('a' \to 'z'\) 打进去找出映射就好了QAQ . Test 2: 求助 \(dalao\) 得知的点.. 答案是 : \(2016x^2 + ...

  3. 【loj2461】【2018集训队互测Day 1】完美的队列

    #2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...

  4. 【2018集训队互测】【XSY3372】取石子

    题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...

  5. 洛谷 P4463 - [集训队互测 2012] calc(多项式)

    题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出 ...

  6. 【uoj#94】【集训队互测2015】胡策的统计(集合幂级数)

    题目传送门:http://uoj.ac/problem/94 这是一道集合幂级数的入门题目.我们先考虑求出每个点集的连通生成子图个数,记为$g_S$,再记$h_S$为点集$S$的生成子图个数,容易发现 ...

  7. 【集训队互测2015】Robot

    题目描述 http://uoj.ac/problem/88 题解 维护两颗线段树,维护最大值和最小值,因为每次只有单点查询,所以可以直接在区间插入线段就可以了. 注意卡常,不要写STL,用链表把同类修 ...

  8. LOJ3069. 「2019 集训队互测 Day 1」整点计数(min_25筛)

    题目链接 https://loj.ac/problem/3069 题解 复数真神奇. 一句话题意:令 \(f(x)\) 表示以原点 \((0, 0)\) 为圆心,半径为 \(x\) 的圆上的整点数量, ...

  9. BZOJ3938 & UOJ88:[集训队互测2015]Robot——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3938 http://uoj.ac/problem/88 小q有n只机器人,一开始他把机器人放在了一 ...

随机推荐

  1. Maven仓库详解

    转载自:Maven入门指南④:仓库   1 . 仓库简介 没有 Maven 时,项目用到的 .jar 文件通常需要拷贝到 /lib 目录,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难于管理.Ma ...

  2. 导出Excel文件

    /// <summary> /// 类说明:Assistant /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http ...

  3. Fast CGI 工作原理

    http://www.cppblog.com/woaidongmao/archive/2011/06/21/149092.html 一.FastCGI是什么? FastCGI是语言无关的.可伸缩架构的 ...

  4. MemoryStream类

    转自:http://www.cnblogs.com/kissdodog/archive/2013/01/20/2868864.html MemoryStream 是一个特例,MemoryStream中 ...

  5. pmtest1.asm pmtest2.asm pmtest5.asm 这几个比较重要.

    读代码时注意Label后面的文字:desc表示是描述符,seg表示是段 pmtest1.asm 主要讲进入保护模式 http://www.cnblogs.com/wanghj-dz/archive/2 ...

  6. ASP.NET MVC 入门1、简介

    什么是MVC模式 MVC(Model-View-Controller,模型-视图-控制器模式)用于表示一种软件架构模式.它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Co ...

  7. Linux使用wake_up_interruptible()唤醒注册到等待队列上的进程

    http://blog.sina.com.cn/s/blog_4770ef020101h48l.html     功能:唤醒注册到等待队列上的进程 原型:     #include     void ...

  8. 【Linux安全】防止 root 用户远程登录

    防止 root 用户远程登录,在终端输入以下命令: vim /etc/ssh/sshd_config 修改如下行为:no PermitRootLogin no 如图所示:

  9. 转自 z55250825 的几篇关于FFT的博文(三)

    题目大意:给出n个数qi,定义 Fj为        令 Ei=Fi/qi,求Ei.      其实这道题就是看到有FFT模板才觉得有必要学一下的...    所以实际上就是已经知道题解了... = ...

  10. 终极秘籍教你怎么找回被盗iPhone 查询ICCID

    iPhone不慎丢失后怎么办?普通青年:立刻报警,基本没用.文艺青年:用Find my iPhone查找位置.但那只是个大概位置,iPhone关机后更是没戏,接着是用iCloud锁定手机,发送警告信息 ...