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

你可能感兴趣的:(csps模拟测试56)