2024.2.17 Sometimes all of our thoughts are misgiven.
今天模拟赛,顺利做了 3h T1 未通过,唐完了,评价是不过 T1 打锤子。
听讲题懂了 T2,但很毒瘤,现在都没什么人做,所以干脆摸了。
T3 懂了前面一半,好毒瘤。
下午学了 slope trick,回顾了一下 wqs 和广义串并联通图方法,很好啊。
晚上决定打摆,不想干事了,开摆。
金鱼草
唐完了。
问题等价于问 \([l,r]\) 内的区间能不能并起来,线段树维护每个节点最大需要 \(l\) 才能覆盖,于是区间 chkmax,区间询问最小值,线段树即可。
\(O(n\log n)\),Code。
凤仙花
令 ?
个数为 \(c\),并且下述复杂度忽略 polylog 因子。
做法 1: 取一个位置将 ?
序列分割成两半,meet-in-middle。
前后两半合并,对应两个状态的 \(S_1,S_2\) 分别对应两个矩形,要求这两个矩形并起来覆盖 \((x,y)\)。
拆柿子移项后可以化为扫描线问题,于是可以做到 \(O(2^{c/2})\)。
做法 2:对于一段 ?
,会发现此时两维独立,此时无论前面的 ?
选什么后面的都能转到自己需要的符号。
将剩下的 ?L
?R
段单独取出来,这里需要爆搜这些问号。
对于一段 ?
分段之后再 meet-in-middle,这里同样会是扫描线问题,不难。
于是复杂度最劣就是 \(O(2^{n-c+(2c-n)/4})\) 也就是 \(O(2^{3n/4-c/2})\)。
取 \(c=3n/4\) 时可以做到 \(O(2^{3n/8})\)。
其实不出成区间出成单个数会不会好做很多,不懂。
虞美人
很困难。
枚举 \(2\) 的总和 \(c\),于是 \(0,1\) 的总和均为 \(-c\)。
考虑先贪心调整总和,取第一个右括号和最后一个左括号一直调整就行。
现在要求前缀和均 \(\ge 0\),同样先假设都被改了 \(x_0,x_1,x_2\),单看 \(02\) 序列,对于一个点 \(i\),若其前缀和为 \(-k\),可以认为此时需要满足 \(\min(x_0,cnt_{<i,0,(},cnt_{>i,0,)})+\min(x_2,cnt_{<i,2,(},cnt_{>i,2,)})\ge k/2\)。
于是可以拆开这个 \(\min\) 以获得若干条限制,他们分别关于 \(x_0,x_1,x_2,x_0+x_2,x_1+x_2\) 的限制,解 \(x_0+x_1+x_2\) 的最小值就可以得到当前情况的答案。
题解说这里需要很多线段树和分类讨论,能做到 \(O(n\log n)\),而且还特意卡掉了,很毒瘤。