随笔分类 - 数据结构
数据结构刷题和总结
摘要:https://www.cnblogs.com/hengzhezou/p/11027190.html
阅读全文
摘要:数据结构和图论易错点 Edge &t=egde[i] 初始化是否完全 空间是否开够了 是否需要LL
阅读全文
摘要:树 树的DFS序 void dfs(int x){ a[++m]=x; //a数组存储DFS序 v[x]=1; //记录点x被访问过 for(int i=head[x];i;i=next[i]){ int y=ver[i]; if(v[y]) continue; dfs(y); } a[++m]=x
阅读全文
摘要:分块 1.在线求区间众数问题 # include <bits/stdc++.h>using namespace std;const int MAXN=4e4+100;int a[MAXN],pos[MAXN],val[MAXN],cnt[MAXN],mn[1000][1000];int t;map
阅读全文
摘要:线段树 修改和查询时间复杂度都为 log n 区间加减 区间求和 区间最大最小 //注意会影响常数# include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=1e6+7;const LL INF=
阅读全文
摘要:对顶栈 【题意】模拟编辑器 算法进阶P50 【题解】对顶栈,(1)对于当前的sum求和的时候下标直接用当前前面的一个栈的size代替就可以;(2)还要注意字符的读入空格会有影响要加getchar;(3)还有stack.pop()之前要注意判断stack是不是空的。 # include <bits/s
阅读全文
摘要:树状数组 一、区间求和&&单点修改 树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&&区间求和 C [ i ] = A [ i - 2^k + 1 ] + A [ i - 2^k + 2 ] + ...... A [ i ] ; (k为i的二进制中从最低位到高位连续
阅读全文
摘要:二分和三分 二分查找 二分的精度问题,一般用double解决,eps=1e-8,关于l,r的取值看那个区间有没有可能取到,然后-1或者+1,会不会使得值变化得特别大,如果会变化得特别大,那么就l,r都取mid O(log n) //查找一个数int b_Search(int x){ int l,r,
阅读全文
摘要:二叉平衡树 # include <bits/stdc++.h> using namespace std;const int MAXN=100;struct SBT{ char data; int l,r;}Tree[MAXN];int tot=0,root=0;int Build(char a)/
阅读全文
摘要:可持久化可并堆 貌似和前k大有关,k短路好像也可以 1、插入一个指定元素(时空复杂度:O(logn)) 2、删除一个指定迭代器(时空复杂度:O(logn)) 3、查询堆顶元素(时空复杂度:O(1)) 4、合并两个堆,并且支持自己合并自己(时空复杂度:O(logn)) 5、将一个堆中的所有元素都加上或
阅读全文
摘要:分块 1.在线求区间众数问题 # include <bits/stdc++.h>using namespace std;const int MAXN=4e4+100;int a[MAXN],pos[MAXN],val[MAXN],cnt[MAXN],mn[1000][1000];int t;map
阅读全文
摘要:class Trie {private: bool isend; vector<Trie*> children; Trie* searchPrefix(string prefix){ Trie* node=this; for(char ch:prefix){ int id=ch-'a'; if(no
阅读全文
摘要:并查集 //路径压缩//路径压缩,就是在每次查找时,令查找路径上的每个节点都直接指向根节点# include <bits/stdc++.h>using namespace std;const int MAXN=1e5+7;int father[MAXN];void MakeSet(int n){
阅读全文
摘要:单调栈 void M_stack(){ a[n+1]=0; int p=0; for(int i=1;i<=n+1;i++){ if(a[i]>s[p]){ s[++p]=a[i],w[p]=1; }else{ int width=0; while(s[p]>a[i]){ width+=w[p];
阅读全文
摘要:Poj 3437 类似于多叉树转化为二叉树 【题意】把多叉树转化为二叉树,和原来相比高度变化了多少 【题解】原来的高度就是原来最多有连续的多少条边,二叉树的高度是按照原来的树的构思每一条路径最长的那一个 # include <bits/stdc++.h> using namespace std; i
阅读全文