题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3533 题解: 首先我们把这些向量都平移到原点.这样我们就发现: 对于每次询问所得到的ans一定由凸包上的点做出贡献. 我们按照给出的询问点的纵坐标的正负做出划分: 若为正:那么对答案做出贡献的点一定在上凸壳上 若为负:那么对答案做出贡献的点一定在下凸壳上 所以我们可以分别考虑上下凸壳.不失一般性,我们假设纵坐标为正. 那么这时候答案肯定在上凸壳上 并且这个上凸壳上的所有点和询问点组成的…
答案一定是在凸壳上的(y>0上凸壳, y<0下凸壳). 线段树维护, 至多N次询问, 每次询问影响O(logN)数量级的线段树结点, 每个结点O(logN)暴力建凸壳, 然后O(logN)三分(二分也是可以的, 不过三分好写, 而且没精度问题....), O(Nlog^2N), 可以AC. -------------------------------------------------------------------------------------------- #include&l…
题目大意 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); "Q x y l r (|x|,|y| < =10^8,1 < =L < =R < =T,其中T为已经加入的向量个数)询问第L个到第R个加入的向量与向量(x,y)的点积的最大值. 集合初始时为空. 分析 题目中相当于给出一堆点\((z,w)\) 询问点\(x,y\) 求\(maximize(ans=xz+yw)\) \(\fr…
Description 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); " Q x y l r (|x|,|y| < =10^8,1 < =L < =R < =T,其中T为已经加入的向量个数)询问第L个到第R个加入的向量与向量(x,y)的点积的最大值. 集合初始时为空. Input 输入的第一行包含整数N和字符s,分别表示操作数和数据类别: 接下来N行,每行一个操作,格式如上所述.…
题目描述 维护一个向量集合,在线支持以下操作:"A x y (|x|,|y| < =10^8)":加入向量(x,y);"Q x y l r (|x|,|y| < =10^8,1 < =L < =R < =T,其中T为已经加入的向量个数)":询问第L个到第R个加入的向量与向量(x,y)的点积的最大值.集合初始时为空. 输入 输入的第一行包含整数N和字符s,分别表示操作数和数据类别:接下来N行,每行一个操作,格式如上所述.请注意s≠'E'时…
前言 刚开始看着两道题感觉头皮发麻,后来看看题解,发现挺好理解,只是代码有点长. BZOJ 3672[NOI2014]购票 中文题面,题意略: BZOJ 3672[NOI2014]购票 设f(i)f(i)f(i)表示iii点所花的最小费用,可以写出方程式f(i)=min{ f(j)+pi(disi−disj)+qi }f(i)=min\{\ f(j)+p_i(dis_i-dis_j)+q_i\ \}f(i)=min{ f(j)+pi​(disi​−disj​)+qi​ }其中jjj是iii的祖先…
思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...) //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; ],v[N*],tot,deep[N],num[N],f[N],fa[N][]; long long ans; int lca(int x,int y)…
题面 BZOJ传送门 思路 首先当然是推式子 对于一个询问点$(x_0,y_0$和给定向量$(x_1,y_1)$来说,点积这么表达: $A=x_0x_1+y_0y_1$ 首先肯定是考虑大小关系:$x_0x_1+y_0y_1\geq x_0x_2+y_0y_2$ 然后其实会发现这条路走不通 那么还有什么办法呢?我们发现上面的式子里面是有$Ans$存在的 那我们尝试把$Ans$搞进去 $y_1=-\frac{x_0}{y_0}x_1+\frac{A}{y_0}$ 诶,半平面出来了= = 实际上,这里…
题目描述     LYK在玩猜数字游戏.    总共有n个互不相同的正整数,LYK每次猜一段区间的最小值.形如[li,ri]这段区间的数字的最小值一定等于xi.     我们总能构造出一种方案使得LYK满意.直到-- LYK自己猜的就是矛盾的!     例如LYK猜[1,3]的最小值是2,[1,4]的最小值是3,这显然就是矛盾的.     你需要告诉LYK,它第几次猜数字开始就已经矛盾了.   输入     第一行两个数n和T,表示有n个数字,LYK猜了T次.    接下来T行,每行三个数分别表…
题解 我们可以根据点积的定义,垂直于原点到给定点构成的直线作一条直线,从正无穷往下平移,第一个碰到的点就是答案 像什么,上凸壳哇 可是--动态维护上凸壳? 我们可以离线,计算每个点能造成贡献的一个询问区间[l,r]表示这个点在第l个询问和第r个询问之间存在,按照每个点的横坐标大小顺序插入线段树,我们就可以类似斜率优化构造出凸包 对于所有询问,我们可以给它们按极角排序,然后遍历线段树,如果按照极角排序,那么垂直于他们的直线斜率递减,最优点也右移 实现的方法就是一边遍历线段树,一边归并排序,每一层按…