2023.02.24琐记
2023.02.24琐记
颓:连着两个彩活怎么办啊 我还是想要几把兔
2023.02.24(1)
T1
优化暴力。即相邻两个操作不能都为异或。那么在统计答案时对每个 \(x \in [0, u]\) 的 \(x\) 次操作都看一遍。
需要注意的是,当剩余操作次数为偶数时才能更新答案,这样才能让异或操作配对。
注意 ans 初始值要设为负无穷。
T2
给边染色直到不能操作,要求形成的新图中不能有奇环。
求最终形成的染色方案数。
\(n\le 16\),一定要往 \(2^n\) 方向去想。
图连通且极大,因此新图中每个点都存在,且新图也连通。
将原图视作很多个环连在一起,猜测答案为每个环的方案数相乘。
如果是大小为 \(x\) 的奇环,那么只有 \(x - 1\) 种方法。
否则有 \(x\) 种方法。
但上述只针对于简单环。
考虑环套环的情况。
补:这是二分图啊喂。枚举一下所属暴力判连通就可以了。
T4
交互,有 \(k\) 个坏人和 \(n - k\) 个好人,\(\frac{n}{3} < k < \frac{2n}{3}\),每次询问三个人 \(a,b, c\),返回是坏人多(\(r = 0\))还是好人多(\(r = 1\)),在 \(n + 6\) 次询问内得到 \(k\) 和 \(k\) 个坏人的编号。
简单版 \(2n\):
对于 \(n + 6\),保证 \(3|n\),不妨拆成 \(3\times (\frac{n}{3} + 2)\)。
1 2 3
2 3 4
3 4 5
T6
栈
2023.02.24(2)
T1
问题为删去最小的线段数量让所有位置的覆盖次数 \(\le k\)。
贪心地选择覆盖到当前位置的区间中右端点最大的。
考虑将区间按左端点为第一关键字从小到大排序,右端点为第二关键字从大到小排序。
区间操作没有必要整数据结构,直接差分维护即可。
问题在于如何找到一个位置对应的最优线段。
在一个位置处添加一些线段,并删除右端点小于当前位置的线段,线段按右端点从大到小排序。
不妨重新嘎哦一个结构体重载排序方式为仅按右端点排序,然后 set 维护。
还没想到线性,并且考试时是 easy version,所以就这样吧。反正 \(O(n\log{n})\) 也能过 hard version。
这么看来一开始只需要把线段按左端点排序就可以了哦。嘠哦。
T2
对 “有向边” 统计被反向经过的数量然后等比数列求和。
考虑一条路径 \(s \to t\) 对有向边 \(u \to v\) 是否有贡献。
- \(u \to v\) 自叶向根:\(s\) 不在 \(u\) 子树内,\(t\) 在 \(u\) 子树内。
- \(u \to v\) 自根向叶:\(s\) 在 \(u\) 子树内,\(t\) 不在 \(u\) 子树内。
判断在不在子树内可以用 dfs 序。
对每一条边,都需要求出给定序列中满足条件的 \((s, t)\) 的数量。
考虑枚举边,此时子树区间固定。
考虑将给定序列分成若干线段(线段端点位置是 dfs 序)。
若是自叶向根边,则左端点在区间左侧,右端点在区间内的线段有贡献。
若是自根向叶边,则左端点在区间内,右端点在区间右侧的线段有贡献。
如何快速(\(O(\log{n})\) 甚至是 \(O(1)\))统计有贡献的线段数量。
一种想法是预处理以某个点为左/右端点时向右/左延伸出去的线段数量,前缀和求出区间和,然后减掉区间内的线段数量。然后如何快速求出一个区间内的线段数量。
用总的线段数量减掉两边的线段数量即可。
错误的。应该用总数减去有一个端点不在区间内的线段数量。
所以是可以 \(O(1)\) 算的!
貌似总复杂度是线性的,怪不得 \(K\) 开到 \(10^6\)。
细节:\(K - 1\) 条线段是有向的,询问的 \((u, v)\) 也是有序的,处理上一定要小心。
具体地:若 \(dfn_{u} < dfn_v\),自根向叶;否则自叶向根。
上面的贡献叙述不太准确,因为要考虑线段的有向:有的线段从左向右,有的线段从右向左。
把正序线段称作一类线段,逆序线段称作二类线段,分别计算。
- 自叶向根:
- 对于一类线段:左端点在区间左侧,右端点在区间内
- 对于二类线段:左端点在区间内,右端点在区间右侧
- 自根向叶:
- 对于一类线段:左端点在区间内,右端点在区间右侧
- 对于二类线段:左端点在区间左侧,右端点在区间内
需要预处理:
- 以点 \(x\) 为左端点向右延伸的线段数量
- 以点 \(x\) 为右端点向左延伸的线段数量
\([1, x]\) 的线段数量(右端点 \(\le x\) 的线段数量)\([x, n]\) 的线段数量(左端点 \(\ge x\) 的线段数量)
那个
区间内的线段数量 二维数点,,,
捏麻麻滴树上差分啊

浙公网安备 33010602011771号