随笔分类 - 算法 / 基础数据结构
摘要:在线性空间中,线性基是一组线性无关的向量组,且在其所在的向量空间中是一个极大线性无关向量组 我们在算法里,可以看作是若干个数的集合 在一个序列中,取其线性基中的任意几个数,可以得到原来序列的任何一个数 线性基中的数都是唯一的 如何构造线性基 贪心的方法 从高位往低位扫,设a[x]为第x位上是1的数,
阅读全文
摘要:给出一个长度为nn的数组,完成以下两种操作:1. 将第ii个数加上kk2. 输出区间[i,j][i,j]内每个数的和 朴素算法单点修改:O(1)O(1)区间查询:O(n)O(n)使用树状数组单点修改:O(logn)O(logn)区间查询:O(logn)O(logn)前置知识lowbit()lowbi
阅读全文
摘要:1. 1 /如何手写一个堆?完全二叉树 5个操作 2 //1. 插入一个数 heap[ ++ size] = x; up(size); 3 //2. 求集合中的最小值 heap[1] 4 //3. 删除最小值 heap[1] = heap[size]; size -- ;down(1); 5 //4
阅读全文
摘要:用于字符串的插入和查询 1.acwing835 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int N = 100010; 5 int son[N][26]; //trie树中每个点的所有儿子 6 int cnt[N],idx
阅读全文
摘要:kmp 算法基本思路 1.初始化 j = -1,表示 pattern 当前已被匹配的最后位。2.让 i 遍历文本串 text,对每个 i,执行 3、4来试图匹配 text[i] 和 pattern[j + 1]。3.直到 j 回退到 -1 或者是 text[i] == pattern[j + 1],
阅读全文
摘要:acwing 154滑动窗口,单调队列q 存的是下标,真正的值需要再套一个a数组 1 #include<iostream> 2 using namespace std; 3 4 const int N = 1e6 + 10; 5 6 int n,k; 7 int a[N],q[N]; //q代表单调
阅读全文
摘要:1.并查集模板 P3367 【模板】并查集 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N = 2e5 + 10; 5 int n,m,x,y,z;
阅读全文
摘要:1.哈希表的使用 <1> 拉链法 1 #include <cstring> 2 #include <iostream> 3 4 using namespace std; 5 6 const int N = 1e5 + 3; // 取大于1e5的第一个质数,取质数冲突的概率最小 可以百度 7 8 //
阅读全文