有 n n n 种烟花,每种烟花有两个参数 a , b a , b a,b,你要构造一种燃放顺序,使得 b b b 的和最大, b b b 会改变,具体来说:设 i i i 在 j j j 前燃放,那么。
1 ≤ n ≤ 1 0 6 1\le n \le 10^6 1≤n≤106
这个题考场就想到了正解。思考一下,最优方案满足一个性质,将 a a a 从小到大排序,依次燃放。暴力求答案,然后选出最优的方案就好了,可惜有一个变量没有给初始值挂了 70 70 70 分,关键是大样例还过了。
给定两个序列 a , b a , b a,b
q q q 次操作,每次把 b b b 的 [ l , r ] [l , r] [l,r] 的每个值加上 k k k ,每次操作后查询:
∑ l = 1 n ∑ r = l n ( ∑ i = l r a i ) × ( ∑ i = l r b i ) m o d ( 1 0 9 + 7 ) \sum _{l = 1} ^n \sum_{r = l}^n(\sum_{i= l}^r a_i) \times (\sum_{i= l}^r b_i) \mod (10^9 + 7) l=1∑nr=l∑n(i=l∑rai)×(i=l∑rbi)mod(109+7)
n , q ≤ 5 × 1 0 5 n , q \le 5 \times 10^5 n,q≤5×105
因为修改的是 b b b 的值,我们就可以考虑把 [ l , r ] [l , r] [l,r] 里面的值对答案的影响算出来。
设 s u m 1 i sum1_i sum1i 是 i × a i i \times a_i i×ai 的前缀和, s u m 2 i sum2_i sum2i 就是 ( n − i + 1 ) × a i (n - i + 1) \times a_i (n−i+1)×ai 的前缀和。
每个 b i b_i bi 的贡献就是 s u m 1 i − 1 × ( n − i + 1 ) + s u m 2 i + 1 × i + a i × i × ( n − i + 1 ) sum1_{i - 1}\times (n - i + 1) +sum2_{i + 1} \times i +a_i \times i \times(n - i + 1) sum1i−1×(n−i+1)+sum2i+1×i+ai×i×(n−i+1)
用一个前缀和维护一下这个值就可以做到 O ( 1 ) O(1) O(1) 修改。
考场最后 30 m i n 30 min 30min 才想到正解,但是码了 15 m i n 15min 15min 发现只能过小样例过不了大样例,考后才发现是快写打错了。
有 n n n 个房间构成了一棵树,边有边权。树上有 m m m 个特殊的房间,求走完这些房间的期望。
每次修改会使得连接 x x x 的所有边加上 k k k
n , m , q ≤ 5 × 1 0 5 n , m , q \le 5 \times 10^5 n,m,q≤5×105
考虑修改一条边的影响,就是这条边两端的特殊房间的数量的乘积。
先把答案求出来,每次修改的时候就是把答案加上这个影响乘上 k k k 就好了。
给出一个长度为 n n n 的序列 a a a ,有 m m m 次操作,格式如下:
n , m ≤ 2 ≤ 1 0 5 n , m \le 2 \le 10^5 n,m≤2≤105
根号分治。维护两个数组 v i , j , v s i v_{i , j} , vs_i vi,j,vsi ,表示对于所有 ( x − 1 ) m o d i = j (x - 1) \mod i = j (x−1)modi=j 的 x x x , a x a_x ax 要加上的值, $vs_{i , j} $ 是 v i , j v _{i , j} vi,j 的前缀和,即对于所有 ( x − 1 ) m o d i ≤ j (x - 1) \mod i \le j (x−1)modi≤j 的 x x x , a x a_x ax 要加上的值。
x ≤ n x\le \sqrt n x≤n 可以直接修改。
x ≥ n x\ge \sqrt n x≥n 需要用分块维护差分
期望得分: 100 + 100 + 0 + 25 = 225 100 +100 + 0 +25 = 225 100+100+0+25=225
实际得分: 70 + 30 + 0 + 25 = 115 70 + 30 + 0 + 25 = 115 70+30+0+25=115
这次本来是一个信心场,但还是失误了。两个题想到正解都挂了,一个是忘记设初值,一个是快写打错,就是自己的代码实现能力不足了。而且码完一个题可以考虑先检查一小会。 T 3 T3 T3 还没有拿到暴力分,遇到这种自己不熟练的题目,可以打打暴力,而不是直接就跳了。