上一页 1 2 3 4 5 6 7 8 9 ··· 26 下一页
摘要: int son[N][26], cnt[N], idx;// 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点// cnt[]存储以每个节点结尾的单词数量 // 插入一个字符串void insert(char *str){ int p = 0; for (int i = 0; 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(31) 评论(0) 推荐(0)
摘要: // s[]是长文本,p[]是模式串,n是s的长度,m是p的长度求模式串的Next数组:for (int i = 2, j = 0; i <= m; i ++ ){ while (j && p[i] != p[j + 1]) j = ne[j]; if (p[i] == p[j + 1]) j ++ 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(31) 评论(0) 推荐(0)
摘要: 常见模型:找出滑动窗口中的最大值/最小值int hh = 0, tt = -1;for (int i = 0; i < n; i ++ ){ while (hh <= tt && check_out(q[hh])) hh ++ ; // 判断队头是否滑出窗口 while (hh <= tt && c 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(26) 评论(0) 推荐(0)
摘要: vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算,按字典序 pair<int, int> first, 第一 阅读全文
posted @ 2022-11-28 21:25 山海自有归期 阅读(38) 评论(0) 推荐(0)
摘要: p[0] = 1;for (int i = 1; i <= n; i ++ ){ h[i] = h[i - 1] * P + str[i]; p[i] = p[i - 1] * P;} // 计算子串 str[l ~ r] 的哈希值ULL get(int l, int r){ return h[r] 阅读全文
posted @ 2022-11-28 21:25 山海自有归期 阅读(33) 评论(0) 推荐(0)
摘要: for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的 阅读全文
posted @ 2022-11-22 23:19 山海自有归期 阅读(26) 评论(0) 推荐(0)
摘要: vector<int> alls; // 存储所有待离散化的值sort(alls.begin(), alls.end()); // 将所有值排序alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重复元素 // 二分求出x对应 阅读全文
posted @ 2022-11-22 23:19 山海自有归期 阅读(30) 评论(0) 推荐(0)
摘要: // 将所有存在交集的区间合并void merge(vector<PII> &segs){ vector<PII> res; sort(segs.begin(), segs.end()); int st = -2e9, ed = -2e9; for (auto seg : segs) if (ed 阅读全文
posted @ 2022-11-22 23:19 山海自有归期 阅读(28) 评论(0) 推荐(0)
摘要: 给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c 阅读全文
posted @ 2022-11-22 23:18 山海自有归期 阅读(25) 评论(0) 推荐(0)
摘要: 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c:S[x1, y1] += c, S[x2 + 1, y1] -= c, S[x1, y2 + 1] -= c, S[x2 + 1, y2 + 1] += c 阅读全文
posted @ 2022-11-22 23:18 山海自有归期 阅读(47) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 26 下一页