摘要:
Solution 线段树套 trie,秒了! \(O(n\log^2 n)\) Code #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = (j); i <= (k); ++i) #defi 阅读全文
摘要:
Statement 一棵树,每个节点上有一个集合,每个儿子集合由父亲集合增加一个点 \((x_i,c_i)\) 或删除一个点得到。根节点集合为 \(\{(0,0,0,c_0)\}\) 多次询问,每次问 \(u\) 点的集合内,\(\min\{(x_i-x)^2+c_i\}\) Solution 首先 阅读全文
摘要:
Statement 求平面最近点对的距离,距离定义为欧几里德距离。 Solution 考虑按 \(x\) 排序,分治计算 先往左右递归,设得到的答案为 \(d\),当前算跨过中点的答案,那么答案 \(\ge d\) 的点对可以不用枚举 设中点为 \(m\) 对 \(i\in[l..m]\),\(x_ 阅读全文
摘要:
Statement 维护一个括号序列,有以下操作: 区间覆盖 区间翻转 区间反转(左括号变右括号,右括号变左括号) 区间问最少改多少位能使括号序列合法,保证有解 Solution 单纯没想到答案怎么算。。。 首先一段括号序,如果消除中间的所有匹配,最终一定形如 ))))(((,这个信息是可合并的 设 阅读全文
摘要:
Solution 单次二分:问“重要度 \(\ge x\) 的所有操作,且 \(t\) 时间点还存在的所有操作中,是否有不经过这个点的” 整体二分:保持操作、询问按时间有序,即预先按时间排序,下传时保持有序; 对于一次 Solve,对于所有重要度 \(\ge mid+1\) 的操作(加入、删除),考 阅读全文
摘要:
Solution 单次二分:二分时间,做这个时间前的所有操作,然后线性统计。 注意到可以整体二分,直接整体二分是 \(O(n\log^2 n)\)。 考虑扫描序列,用线段树维护每个时间段内该位置的增加值,差分一下可以实现。 将这棵线段树持久化一下,一个国家所有位置同时二分即可 \(O(n\log n 阅读全文
摘要:
Statement 给出 \(n\) 个数的序列 \(\{a_i\}\),接下来 \(m\) 秒中每一秒会有一个数发生变化,然后恢复。 问最长的子序列长度,使得任意时刻这个子序列不下降。\(n\le 10^5\) Solution 设 \(b_i\) 为 \(i\) 最小能变成的数,\(c_i\) 阅读全文
摘要:
Solution 整体二分板子题 vector 太好写了111 #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = (j); i <= (k); ++i) #define reo(i, j, 阅读全文
摘要:
Statement 先把串 reverse,多次给 \(l,r\),求 \[ \max_{l\le i<j\le r}\{\text{LCP}(i,j)\} \]Solution \(\text{sqrtlog}\sim\text{sqrt}\):莫队 + 线段树 / 树状数组 / set,用 SA 阅读全文
摘要:
我觉得这东西有必要记一下,因为光是看 PPT 很难自己写出代码……具体步骤相关啥都没写。 另外学这个东西也不是很必要…… Solution 我们需要一个维护最小值、最小值编号,支持区间加的 LCT。需要支持以下操作: \(find\_root(u)\) \(link(u,v)\) \(cut(u,v 阅读全文