Dada 的待实现题目
前言
由于每天晚上 dadaaa 都会因为补不完题而焦头烂额,为了防止过了一段时间之后胡出来的题不记得做法了,因此写一个口胡记录,等有空再实现。
其实就是写不完的题咕咕存放的地方
QOJ9406
假设我们选出来的三个子串按字典序从小到大排序为 \(S1,S2,S3\)。注意到,我们一定不能够让 \(S3\) 非常严格的大于 \(S1,S2\),此时无论 \(S1,S2\) 怎么拼也拼不出来 \(\gt S3\) 的。
此时 \(S1,S2\) 一定有一个是 \(S3\) 的前缀,且此时剩下那个字典序大于 \(S3\)。此时我们可以枚举 \(S3\) 的一个前缀,设其为 \(S1\),那么我们的 \(S2\) 取值范围是一个区间,二分即可。
怎么比较字典序大小?把所有串拼起来跑 \(SA\) 就能实现。
此时注意到,如果我们选择出 \(S1\) 时 \(S2\) 合法,选择出 \(S2\) 时 \(S1\) 合法,那么这会算重。会算重的次数是所有 \(S1>S3-S2\) 且 \(S2>S3-S1\)。这是一个二维数点状物,问题化成 \(a_i \gt b_j \cap a_j > b_i\),考虑扫描线和树状数组维护。(怎么做待更新)
然后就做完了,复杂度 \(O((n+|S|)\log (n+|S|))\)。
n进制加法
主席树维护加法,点分树数,随机二分即可。
二分到底层控精度。
古籍
转换为 \(S=S_i \cap S_j, S_i \cap S_j \cap D = \emptyset\) 的数量。注意到后半部分可以用 \(1\) 数量刻画,跑 FWT 即可。复杂度为 \(O(n^2 2^n)\)。
Haitang and Diameters,16481
点减边容斥,问题变成了求对于每一个点存在两个深度最大值相同的方案数量,可以直接换根解决。
注意到我们是类似于可以前缀和的实现,因此每次合并复杂度为 \(O(n)\),总复杂度为 \(O(n^2)\)。
awaw,NFLS18042
按照 \(w\) 分块,每次跑单调队列等数据结构找出总共 \(O(n)\) 个方块,每个方块用一点办法找出上下左右的连通方块,跑并查集即可。
复杂度排序后 \(O(n)\)。
联邦之终,NFLS11255
做过的题,需要把线段树改为平衡树就行了。
第二题,NFLS18061
注意到我们对对于”走一条边最大值的边“这个事情可以颜色段均摊,因此我们只需要写一棵单点修改,区间赋值或区间加减的维护 pair 和的线段树就行了。
切树,NFLSP12956
我们可以很容易的得到一个维护集合的dp,进行一个神秘的 Reduce 操作后,注意到值域跨度原来是 \(O((R-L)*k)\),除掉了一个 \(O(R-L)\),此时我们只需要维护 \(O(k)\) 个就行了。
怎么 Reduce 呢?我们注意到对于 \(a<b<c,c-a<R-L\),那此时我们的 \(b\) 是显然没用的,\(b\) 任何有用的情况都能够被平替掉,因此任意一个的间隔就是 \(O(R-L)\) 了。
总复杂度是 \(O(NK^4) \to O(NK^3)\),因为树形背包。
偷走零件, NFLSP743 BZOJ4647
注意到,我们除了 \(k=1\),剩下的 \(F_k\) 是 \(F_{k+1}\) 的前缀。
因此我们只需要处理 \(k=44\) 的时候这个超级长的序列,询问直接做就行了。
考虑把 \(A\) 串和 \(B\) 串都变成比 \(S\) 串长的情形,此时我们的 \(S\) 串子串出现的位置只有 \(A-B\),\(B-A\),\(B-B\) 三种情形。
我们把询问变成:求 \(\sum_{i=a}^{b-(d-c)} \operatorname{LCP}(C,i)>=d-c+1\) 状物。然后我们根据 起始点所在串 分类,建出 SA 询问即可。这样做的目的是减少一些分类套路。最后的答案变成一堆 \(A-B,B-A,B-B\) 和一个首尾段查询。这东西建主席树是好搞的。
写小心一点。
CF1515G
没写完。
CF1874
快看懂了,记得写
NFLS15401
假设我们设置 \(k\) 个警报,那么报警的次数为 \(k \log V\)。
因此我们在线段树上挂警报,每次区间修改的时候如果子树内有已经报警的警报就继续往下跑,否则打标记。
这样做的话,我们一次报警的复杂度是 \(O(\log^2 n)\)(报警两个,增删警报器两个,因此还是两个)。而对于修改而言,我们只会 \(O(Q\log n)\),因此总复杂度是 \(O(n \log^3 n \log V + Q \log n)\)。这是能过的。
补完后记得学一下二进制警报器,可能有一点用。
NFLS18430
搞出二分图,然后先跑最大匹配,如果最大匹配不是 \(\min(n,m)\) 就爆(因为你树肯定要有最大匹配的),然后我们从多的那一边的没匹配的搜不交增广路,如果把所有点都搜到了就连起来(此时白点都有两个了),然后再跑生成树。搜不到显然寄了。

浙公网安备 33010602011771号