摘要: (1) 拉链法 int h[N], e[N], ne[N], idx; // 向哈希表中插入一个数 void insert(int x) { int k = (x % N + N) % N; e[idx] = x; ne[idx] = h[k]; h[k] = idx ++ ; } // 在哈希表中 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(17) 评论(0) 推荐(0) 编辑
摘要: // h[N]存储堆中的值, h[1]是堆顶,x的左儿子是2x, 右儿子是2x + 1// ph[k]存储第k个插入的点在堆中的位置// hp[k]存储堆中下标是k的点是第几个插入的int h[N], ph[N], hp[N], size; // 交换两个点,及其映射关系void heap_swap 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(27) 评论(0) 推荐(0) 编辑
摘要: (1)朴素并查集: int p[N]; //存储每个点的祖宗节点 // 返回x的祖宗节点 int find(int x) { if (p[x] != x) p[x] = find(p[x]); return p[x]; } // 初始化,假定节点编号是1~n for (int i = 1; i <= 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 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 山海自有归期 阅读(17) 评论(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 山海自有归期 阅读(15) 评论(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 山海自有归期 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 常见模型:找出每个数左边离它最近的比它大/小的数int tt = 0;for (int i = 1; i <= n; i ++ ){ while (tt && check(stk[tt], i)) tt -- ; stk[ ++ tt] = i;} 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(14) 评论(0) 推荐(0) 编辑
摘要: // hh 表示队头,tt表示队尾的后一个位置int q[N], hh = 0, tt = 0; // 向队尾插入一个数q[tt ++ ] = x;if (tt == N) tt = 0; // 从队头弹出一个数hh ++ ;if (hh == N) hh = 0; // 队头的值q[hh]; // 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(0) 评论(0) 推荐(0) 编辑
摘要: // hh 表示队头,tt表示队尾int q[N], hh = 0, tt = -1; // 向队尾插入一个数q[ ++ tt] = x; // 从队头弹出一个数hh ++ ; // 队头的值q[hh]; // 判断队列是否为空if (hh <= tt){ } 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(18) 评论(0) 推荐(0) 编辑
摘要: // tt表示栈顶int stk[N], tt = 0; // 向栈顶插入一个数stk[ ++ tt] = x; // 从栈顶弹出一个数tt -- ; // 栈顶的值stk[tt]; // 判断栈是否为空if (tt > 0){ } 阅读全文
posted @ 2022-11-28 21:26 山海自有归期 阅读(19) 评论(0) 推荐(0) 编辑
摘要: vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算,按字典序 pair<int, int> first, 第一 阅读全文
posted @ 2022-11-28 21:25 山海自有归期 阅读(15) 评论(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 山海自有归期 阅读(17) 评论(0) 推荐(0) 编辑