csps模拟测试56
好题。
T1:
对于这个神奇的题目,首先可以推出对于$\sum k*x+\sum b$,表示最后我的选择集合,
那么若k小于0,我可以用判断0是否符合来搞,
k大于0,直接二分答案即可,让它尽量小,用$nth$函数可以实现$O(n)$。
二分答案贪心验证。
T2:
系数递推?
首先每个点的$w[x]=a[x]*w[1]+b[x]$就是一定能用根节点表示一下。
然后我就可以对于给定的两个点列关于x和1的两个方程,如果有整数解那么输出否则判断是多解还是无解。
那么接下来主要是维护b,其实b最一开始是通过根到节点系数递推出来的,但是鉴于本题的柿子简单,他可以写成+-+-+-+-边权的形式,因为他有更改的操作,对于每个边有一个权值,一个点的b值应该是从该点开始到根,把+-+-+-,自己到父亲的+,在往上是-,然后是+,直到到根位置,那么问题就出现了,对于一个点他的b值是他父亲的b值取负+父亲边,那么所有边的系数都变负了。出现了两种,深度为奇数的点
和深度为偶数的点。所以我维护一个从根到每个点的+-,根是+,对于一些点是对的,对于一些点要取负。
支持单点查询和区间修改,这个题改一个点子树都要改,所以可以维护dfs序区间修改。
线段树会被卡常,需要把b在根据dfs序差分一下放到树状数组上。
T3:
扫描线gggggggg
Zeit und Raum trennen dich und mich.时空将你我分开。