摘要: 求解最大回文字符子串。 首先会想到一个算法,枚举每个字符作为中心点(奇数)或中心点左一个(偶数),分别向两侧扩展到最大长度。时间复杂度O([n,n^2]),随机数据接近O(n)。显然是不稳定的。 考虑回文字符串内部的性质:关于回文串中心点对称的两个字符串,一定对称且全等。 设回文串中心点为mid,右 阅读全文
posted @ 2022-07-23 11:56 sandom 阅读(30) 评论(0) 推荐(3) 编辑
摘要: 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; 阅读全文
posted @ 2022-07-23 11:43 sandom 阅读(47) 评论(0) 推荐(2) 编辑
摘要: 当答案线性单调变化(也就是类一次函数),可以使用二分答案,取mid,若小于mid的满足,则大于mid的不满足或不更优,在题目中多表现为求:最大值最小,最小值最大。将求解转化为判定。 int middle(int l, int r)//二分答案 { int ans = 0; while (l <= r 阅读全文
posted @ 2022-07-23 11:21 sandom 阅读(35) 评论(0) 推荐(2) 编辑
摘要: 对一棵树多次选取某些点进行询问,我们称这些点为关键点,而其他点不影响答案,我们可以建立一棵虚树,只包含这些关键点以及连接他们的LCA。 inline bool cmp(int A, int B) { return dfn[A] < dfn[B]; } int stk[Z], tp; inline v 阅读全文
posted @ 2022-07-20 21:15 sandom 阅读(32) 评论(0) 推荐(2) 编辑
摘要: 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]; 阅读全文
posted @ 2022-07-04 12:07 sandom 阅读(37) 评论(0) 推荐(2) 编辑
摘要: 生成数据(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 阅读全文
posted @ 2022-07-02 22:08 sandom 阅读(49) 评论(4) 推荐(4) 编辑
摘要: 重链剖分 int dep[Z], siz[Z], dad[Z], kid[Z];//kid[rt]:rt的重儿子编号 int tim, dfn[Z], rnk[Z], top[Z];//rnk[rt]:dfs序为rt的节点编号; top[rt]:rt所在重链的顶部节点 void search(int 阅读全文
posted @ 2022-06-12 17:23 sandom 阅读(31) 评论(0) 推荐(2) 编辑
摘要: 一颗二叉搜索树应该做到的事情 int get_pre(int rt, int val)//前驱节点 { int ans; while (rt)//不断向右逼近 { if (bt[rt].val < val) ans = rt, rt = rk; else rt = lk; } return bt[a 阅读全文
posted @ 2022-05-25 16:53 sandom 阅读(86) 评论(0) 推荐(2) 编辑
摘要: DZY Loves Math II 内存限制:512 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 输入格式 第一行,两个正整数 S 和 q,q 表示询问数量。接下来 q 行,每行一个正整数 n。 输出格式 输出共 q 行,分别为每个询问的答案。 对于100%的 阅读全文
posted @ 2022-05-19 11:57 sandom 阅读(129) 评论(3) 推荐(4) 编辑
摘要: 二分图的判定(染色法) int col[Z]; bool dfs(int rt, int color) { col[rt] = color; for (int i = head[rt]; i; i = e[i].ne) { int son = e[i].v; if (!col[son] && !df 阅读全文
posted @ 2022-04-25 15:13 sandom 阅读(29) 评论(0) 推荐(2) 编辑