美好的一天从抱灵开始~

0.闲扯

pyyz 的服务比什么 bct 好多了好吧……
开题一看,发现 lxl 完美踩到了我的知识漏洞,于是开始颓
下午一看成绩果然抱灵了,我是傻逼。
电脑出了各种各样的锅,咱又对网络什么的不了解,于是直接换了机子。

1.题解

A

给定一个 01 串,求长度最短的未出现的串。
hyl 场切了,大家一起来 \(\%\) 她!
其实是傻逼题,但是考场手贱开了 T2 没时间写了。
可以猜/证一个结论:答案长度不超过 \(\log n+1\)
我们显然可以线性找出长为 \(\log n+1\) 的子串的 \(\text{mex}\)
然后我们可以通过不断除以二得到所有长度减一的子串。
每次值域会减半,加上 \(\text{mex}\) 的线性还是线性的。

B

洛谷 P6106。
贡献可减,我们先拆成前缀矩形。
先考虑斜率正的线段,发现只有几种情况:
1.完全包含,二维偏序求解;
2.与边界相交(先只考虑右边界),由于所有线段不交,拿一条扫描线从左往右扫到的线段相对顺序不变。我们用一种导数的思想求出扫描线向右一个单位长度扫过的线段长,然后我们就可以求出矩形内的长度了。

C

给出一棵树,每次查询给出一些点,求它们的虚树上边权两两相等的对数。
\(k\) 个点确定的虚树可以表示成 \(O(k)\) 条链,我们直接莽两两链之间的询问,发现可以做一个前缀和拆成到根路径的贡献再莫队。
\(k\) 很大怎么办?可以暴力 \(O(n)\) 统计每条边是否在虚树上。
两个算法平衡一下。

2.DS 选讲

1

给定一个序列,询问一个区间里有多少子区间色数为奇数。
考虑扫描线维护。扫区间右端点 \(r\),设 \(r\) 的前一个相同颜色位置为 \(i\),则右端点会对 \((i,r]\) 造成贡献。
维护区间异或和,问题转化为区间异或一和查询区间历史和。

2

洛谷 P7447。
用一种奇怪的倍增值域分块方式,\([2^k,2^{k+1})\) 为一块。
对于区间 \(-x\) 操作,若 \(x<2^k\) 则整块 \(-x\),若 \(x\ge2^{k+1}\) 则不需要修改,否则需要修改一个后缀。
对于每块建一个线段树维护区间最小值,二分一个 \(-x\) 后“掉落” 到下一个值域块的数,再维护区间最大值,修改时减去 \(x\)

3

BZOJ 3489。
可持久化树套堆???
算出前驱后继,有贡献的区间很好算。
接下来好像涉及到了奇怪的科技,不懂,后补。

4

UOJ 207。

火车司机出秦川,跳蚤国王下江南,共价大爷游长沙。

设询问 \((u,v)\),不妨设 \(v\) 较深。那么容易发现有答案等价于所有链恰有一端在 \(v\) 的子树内。
这个东西一看是什么玩意啊(躺平),于是采用一些投机取巧的方式比如哈希。
对每个路径随机一个非常大的权值,如果子树异或和等于所有路径权值的异或和,那么可以认为是合法的。
而 LCT 维护子树是很简单的,于是我们做完了。

posted @ 2021-05-30 21:27  ajthreac  阅读(212)  评论(0编辑  收藏  举报