有 n 个二元组,每个二元组有参数 (p_i,l_i)。你需要求出对于所有二元组的 n! 种排列顺序,其魅力值最大是多少。
定义 (p_1,l_1),(p_2,l_2),\ldots,(p_n,l_n) 的魅力值为:
有一个总动力值 s,初始为 0,还有一个魅力值 m,初始也为 0。
对于 i=1\ldots n,有 p_i 的概率让总动力值 s 和魅力值 m 同时增加 l_i,有 1-p_i 的概率让魅力值 m 增加 s-l_i。
Data Range: 1\le n\le 2\times 10^5。
题解
出题人样例只给 n=2,素质低下。
考虑直接 Exchange-Argument,对于两个二元组 (p_i,l_i),(p_j,l_j),计算其先执行 i 后执行 j 和先执行 j 后执行 i 两类情况对答案的影响,做差解不等式就可以得到排序条件。总时间复杂度为 O(n\log n),没什么好说的。
挂分原因
挂成 40 了,原因是拆括号拆错了(但是因为赛时还拼了一个爬山所以小数据拍不出来问题 :(
B
预计难度:*3000 / 黑(难度全在代码实现和细节处理上,鉴定为大份)
Tag:数据结构,点分治,分类讨论
题意
有一个 n 个点的树,你还有 m 个二元组,第 i 个二元组是 (x_i,y_i)。现在你需要找出 1\le i\le j\le m 使得 D(x_i,x_j)+D(y_i,y_j) 的值最大,其中 D(i,j) 表示在树上 i 点到 j 点的唯一简单路径上边的数量。
Data Range: 1\le n,m\le 5\times 10^5。
题解
后面为了方便,记 d(i,j)=D(x_i,x_j)+D(y_i,y_j)。
考虑分别对 x,y 两个维度做点分治。先考虑 x 维度:设当前点分治处理的重心是 c,则若 x_i,x_j 删除 c 后属于不同的树或 x_i,x_j 中有一个值为 c,那么 x_i\to x_j 的唯一简单路径一定经过点 c。因此有 D(x_i,x_j)=D(x_i,c)+D(x_j,c),即 d(i,j)=D(x_i,c)+D(y_j,c)+D(y_i,y_j)。此时考虑记 w_j=D(x_j,c) 那么对当前的 i 二元组只需要求出 \max\limits_j(w_j+D(y_i,y_j)) 的最大值加上 D(x_i,c) 即可。
此时问题被转化为:有 m 个点 y_i 带权 w_i,支持插入一个点 (y_i,w_i) 和查询一个点 y_i 的 \max\limits_j(w_j+D(y_i,y_j)) 两个操作。此时考虑再对 y 维度做一次点分治,此时把 y 按照其在 x 维度上删掉点 c 后属于的子树分类处理,然后大力分类讨论即可。总时间复杂度为 O(n\log^2n),细节有一车,写起来非常赤石。
扩展
可以把二元组扩展成 k 元组,这样可以做 k 轮点分治,时间复杂度为 O(n\log^kn)。当然没人想写这个。
挂分原因
挂成 80 分了,原因暂时未知,应该是哪个地方边界或者细节出了点小问题
C
预计难度:*1800 / 绿
Tag:容斥原理,分类讨论
题意
+ $a\in[l_1,r_1]
b\in[l_2,r_2]
c\in[l_3,r_3]
d\in[l_4,r_4]
a\neq b,b\neq c,c\neq d,d\neq a
Data Range: 1\le Q\le 10^6,1\le l_i,r_i\le 10^9(i=1\ldots 4)。