[UOJ198]时空旅行】的更多相关文章

看懂题目就知道$y,z$是没用的,这题相当于是给一堆$(x_i,c_i)$和询问$x_q$,要求$(x_q-x_i)^2+c_i$的最大值 先把这个式子拆开:$-2x_ix_q+x_i^2+c_i+x_q^2$,那么询问就是求一堆直线$y=-2x_ix+x_i^2+c_i$在$x=x_q$处的最小值,维护坐标轴底端的上凸壳即可 再看题目中关于“时空”的限制,其实就是给一棵树,某一些点会有标记表示以这个点为根的子树内有/没有一条直线,我们用dfs序在线段树上覆盖对应区间并预处理出每个线段树节点的凸…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 2045 年,人类的技术突飞猛进,已经找到了进行时空旅行的方法.小 R 得到了一台时空旅行仪,他想用它调查不同时空中人类的发展状况. 根据平行时空理论,宇宙中存在着很多独立的时空,每个时空在下一个时间点还会分化出若干个不同的时空.宇宙是一个三维空间,人类使用空间直角坐标系来描述空间中的一个位置,三维坐标分别是 x,y,z. 我们假设在初始的时空(编号为 0)中,…
uoj description 你要维护若干个集合,每个集合都是有一个编号比他小的集合扩展而来,扩展内容为加入一个新的元素\((x,c)\)或者删除一个已有元素.集合的扩展关系之间构成一个树形结构. 有\(m\)次询问,每次给出一个\(x_0\),询问第\(s\)个集合中\((x-x_0)^2+c\)的最小值. \(n,m\le5\times10^5\) sol 把这个树形结构建出来,然后一个元素在树上存在的位置就是--一个连通块? 这样转化显得很蠢,实际上一个元素在树上存在的位置就是它第一次出…
传送门:http://uoj.ac/problem/198 [题解] 首先y.z是没有用的.. 然后式子就是w = (x0-xi)^2+ci的最小值,化出来可以变成一个直线的形式. 然后我们可以用线段树维护dfs序上的每个点. 每个点维护经过这个点的所有直线(标记永久化),也就是维护上凸壳. 然后我们把询问按照x排序,每次决策点只会后移.所以复杂度就有保证啦! 真**难写 还有一个十分有趣的事实啊 我用一个号交完ac在另一个号再交就RE了啊... 不管了反正过了 # include <vecto…
http://uoj.ac/problem/198 (先补一下以前的题解) 这道题5分暴力好写好调,链上部分分可以用可持久化线段树,每次旅行\(x\)值相同的可以用标记永久化线段树.我还听到某些神犇说可以用KD-Treebalabalabala. 很显然\(y,z\)坐标都没用.然后... 在一个时空中,对于固定的\(x_0\),要求最小的\(ans=c_i+(x_i-x_0)^2\),拆开可以得到\(ans-x_0^2=(c_i+x_i^2)-2x_ix_0\),这样只需要求\(min_i\{…
链接 http://uoj.ac/problem/198 题解 首先要发现答案要我们求这个式子: \[ ans=min\bigl((x_i-x)^2+c_i\bigr) \] 显而易见的是这种时空嫁接的关系会形成一棵树.但是我们并不能像\(NOI2014\)购票那样直接在树上维护一条链的栈,因为每个点代表的既有可能是加入一个点,又有可能是删除一个点. 考虑每个点的存在时间都是一些连续区间,所以就可以在欧拉序或者\(dfs\)序上分治了. 至于询问的方式,我们可以先把线段树上的每个节点把凸包维护出…
第一次写线段树分治的题目,没想到是道这么毒的题233 首先发现题目里的\((x,y,z,c)\)就是在放屁,只有\((x,c)\)是有用的 因此我们可以把题意转化为,在某一个时间节点上,求出所有元素的 \[\min((X-x_i)^2+c_i)\] 稍加观察会发现时间节点是成一棵树的形态的,因此对于一个星球,它存在的时间节点在树上必然是两个区间(第一次出现的子树减去第一次删除的子树,当然没删除的话就是一个区间) 因此我们利用线段树分治的思想,把这些区间扔到线段树里,考虑用线段树分治来做 然后考虑…
description 题面 solution 线段树分治+斜率优化毒瘤题 题目可以简化为: 你要维护一个包含元素\((x,c)\)的集合 修改操作为从以前的一个版本更新,修改内容为添加或删除一个元素 查询操作给出\(x_0\),查询某个版本中的\(min\{(x-x_0)^2+c\}\) 可以知道版本之间的时间关系形成一颗树 如果在一个版本删除了某个元素,那么在这个版本的子树中都不会再有这个版本 由于子树的\(dfn\)是连续的,因此操作可以简化为在序列上进行,总共有\(O(m)\)个区间 最…
应该是比较套路的,但是要A掉仍然不容易. 下面理一下思路,思路清楚了也就不难写出来了. 0.显然y,z坐标是搞笑的,忽略即可. 1.如果x不变,那么直接set即可解决. 2.考虑一个空间和询问x0,通过化式子发现实际上就是:把每个星球看成一个一次函数,其实是在询问这个空间内的所有一次函数在x0处的最小值. 3.这个显然是一个凸包,所以我们需要对每个空间维护一个凸包,由空间整体呈树状,可以想到用DFS序+线段树维护区间. 4.预处理出每个星球的存在范围,在线段树上永久化标记.查询时依次递归求最小值…
当时看这道题AC的人数比较多,就开了这道题. 很容易发现是这是一个有关凸包的题. 然后不知道怎么维护凸包,一直在想cdq,感觉复杂度不行,于是被这玩意难住了…… 幸好有亲学长yyh造福人类的题解:https://blog.csdn.net/qwsin/article/details/70884985,十分详细,而且相对容易看懂些,脑回路跟我差不多. 发现主要是我没学线段树标记永久化,所以去学了一下这个东西:https://www.cnblogs.com/Hallmeow/p/8004676.ht…