ABC351讲解
ABC351
A:
思路:
直接按题意模拟,求出 \(\Sigma A\) 和 \(\Sigma B\) 再相减便是差,因为要获胜所以再 \(+1\) 即可。
代码
B:
思路:
直接按照题意 \(N^2\) 枚举即可。
代码
C:
思路:
直接按照题意模拟即可。
代码
D:
请 lrx 讲解。
F:
思路:
题意十分简单,就是求 \(\Sigma_{i=1}^N\Sigma_{j=i+1}^N\max(a_j-a_i,0)\) 直接暴力做是 \(O(N^2)\) 的不可通过。
考虑优化,转化为对于每一个 \(i,1\leq i\leq N\) 求 \([i+1,N]\) 中大约等于 \(A_i\) 的总和减去 \([i+1,N]\) 中大于等于 \(a_i\) 的个数乘 \(a_i\)。
即:\(\Sigma_{j=i+1}^N S+=[a_j>a_i],\Sigma_{j=i+1}^N s+=[a_j>a_i]*a_j\) 那么结果应该加上 \(s-S\times a_i\)
但是直接做仍然是 \(O(N^2)\) 的,所以可以用权值线段树进行优化,但是因为 \(a_i\leq 10^8\) 所以直接线段树行不通,得先离散化后再用权值线段树实现。
具体的:令权值线段树上的每一个点 \(i,t_i\) 表示 \(i\) 这个值出现的次数,\(s_i\) 表示 \(t_i\times i\) 那么访问的时候就可以访问 \(\Sigma_{rank_i+1}^N\) 的总和了。
权值线段树的代码
不难发现可以用平衡树做,平衡树的代码
因为是单点修改,区间查询,所以可以用权值树状数组实现,权值树状数组代码

浙公网安备 33010602011771号