07 2022 档案
摘要:inline void insert(int x)//插入构造线性基 { for (int i = 61; i >= 0; i--) if (x >> i) { if (p[i]) x ^= p[i]; else { p[i] = x; break; } } } inline int getmax(
阅读全文
摘要:求解最大回文字符子串。 首先会想到一个算法,枚举每个字符作为中心点(奇数)或中心点左一个(偶数),分别向两侧扩展到最大长度。时间复杂度O([n,n^2]),随机数据接近O(n)。显然是不稳定的。 考虑回文字符串内部的性质:关于回文串中心点对称的两个字符串,一定对称且全等。 设回文串中心点为mid,右
阅读全文
摘要:a[]为全体实数集 1.O(n^2)枚举 2.利用单调性和贪心O(n) 首先我们累加a[i],直到sum出现了负数,这时候不管后面的数如何,舍弃前面这一段一定比保留更优,因为舍弃后sum=0。 int max_sum() { int ans = 0, tmp = 0; for (re i = 1;
阅读全文
摘要:当答案线性单调变化(也就是类一次函数),可以使用二分答案,取mid,若小于mid的满足,则大于mid的不满足或不更优,在题目中多表现为求:最大值最小,最小值最大。将求解转化为判定。 int middle(int l, int r)//二分答案 { int ans = 0; while (l <= r
阅读全文
摘要:对一棵树多次选取某些点进行询问,我们称这些点为关键点,而其他点不影响答案,我们可以建立一棵虚树,只包含这些关键点以及连接他们的LCA。 inline bool cmp(int A, int B) { return dfn[A] < dfn[B]; } int stk[Z], tp; inline v
阅读全文
摘要:int siz[Z], kid[Z], root, size;//kid[rt]:该点的最大子树的大小 bool vs[Z]; void getroot(int rt, int fa)//求树的重心 { siz[rt] = 1, kid[rt] = 0; for (re i = head[rt];
阅读全文
摘要:生成数据(data) inline int random(int n) { return 1ll * rand() * rand() % n + 1; } inline int get(int l, int r) { return 1ll * rand() * rand() % (r - l + 1
阅读全文