摘要: //主席树 权值线段树+可持久化 //权值线段树:在此处指各个数字在某个区间内出现的次数 //那么第一棵权值线段树会记录[1,1]的数字出现次数 //第n棵权值线段树会记录[1,n]的数字出现次数 //例:数列为110001 //第一棵权值线段树记录为tree1[0]=0 tree1[1]=1 //第二棵权值线段树记录为tree2[0]=0 tree2[1]=2 //第六棵权值线段树记录... 阅读全文
posted @ 2018-07-08 18:44 radishえらい 阅读(272) 评论(0) 推荐(0) 编辑
摘要: //主席树 可持久化线段树 //对于每次更新新建根节点 //将涉及到改变的节点全部新建,未涉及改变的节点全部用以前的节点代替 //可大大节省空间 #include #include #include #include #include #include using namespace std; int n,m,cnt,root[1000001],a[1000001]; struct uio{... 阅读全文
posted @ 2018-07-08 18:43 radishえらい 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 注:由于本代码注释默认各位都已理解了fhqTreap的基本操作,因此本代码对于例如split,merge等基本 函数的注释未曾给出。若您看不懂本代码,您可以先移步这里。 阅读全文
posted @ 2018-07-08 18:42 radishえらい 阅读(1374) 评论(1) 推荐(0) 编辑
摘要: //平衡树 替罪羊树 //不进行旋转 当左右子树重量相差过大(通常以3:1为界)就把树拍扁重构 //重构即以最中心节点为根节点 二分建树 #include #include #include #include #include #include #define lim 0.75//拍扁重构的标准 using namespace std; int n,root,size,cnt; int g... 阅读全文
posted @ 2018-07-08 18:42 radishえらい 阅读(153) 评论(0) 推荐(0) 编辑
摘要: //Treap fhq版(不旋转) //所有操作依靠split()(分离)和merge()(合并)完成 //可支持区间操作和可持久化 比普通Treap更通用 //所有Treap中序遍历均为递增序列 #include #include #include #include #include #include #include using namespace std; int n,cnt,si... 阅读全文
posted @ 2018-07-08 18:41 radishえらい 阅读(834) 评论(0) 推荐(0) 编辑
摘要: //平衡树 Splay //利用双旋 防止树退化成链 //时间比Treap慢log(n) #include #include #include #include #include #include using namespace std; struct uio{ int son[2],fa,num,tim,siz;//左右儿子,父节点,点值,出现次数,子树大小+自己大小 }spl[10... 阅读全文
posted @ 2018-07-08 18:40 radishえらい 阅读(139) 评论(0) 推荐(0) 编辑
摘要: //平衡树 Treap //维护一个堆使得随机权值小(大)的数始终在上方 //使用随机权值目的:防止出题人卡 #include #include #include #include #include #include using namespace std; struct uio{ int l,r,siz,num,rd,tim;//左儿子,右儿子,子树大小+自己大小,点值,随机权值,出... 阅读全文
posted @ 2018-07-08 18:40 radishえらい 阅读(187) 评论(0) 推荐(0) 编辑
摘要: //线段树 //每个节点代表一段区间 除叶节点外均有左右子节点 //左子节点:[L,(L+R)/2] 右子节点:[(L+R)/2+1,R] 叶节点长度为1 #include #include #include #include #include #include using namespace std; int n,a[1001],cnt=1;//cnt树点标号 struct uio... 阅读全文
posted @ 2018-07-08 18:29 radishえらい 阅读(137) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include #define INF 99999999 using namespace std; int n,m,k,cnt; int len[500001],head[500001],jdg[500001],que[500001]; struct uio{ int to,next,wei; ... 阅读全文
posted @ 2018-07-08 17:32 radishえらい 阅读(101) 评论(0) 推荐(0) 编辑
摘要: //trie树 //字典树 查找字符串 #include #include #include #include #include #include using namespace std; struct uio{ int son[27],val;//son[a]保存是否存在编号为a的子节点是否存在 val保存以该节点为尾节点的字符串权值 }trie[1001]; int n,cnt;... 阅读全文
posted @ 2018-07-08 17:32 radishえらい 阅读(117) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include using namespace std; struct uio{ int from,to,que; }edge[1001]; int road[1001],n,m; int main() { cin>>n>>m; for(int i=1;i>edge[i].from... 阅读全文
posted @ 2018-07-08 17:31 radishえらい 阅读(91) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include #include #include using namespace std; int n,m,s,t,cnt,head[100001]; int dis[100001],vis[100001]; struct uio{ int to,nxt,wei; }edge[10000001]... 阅读全文
posted @ 2018-07-08 17:30 radishえらい 阅读(101) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include using namespace std; int n,m,INF=99999999; int e[1001][1001],road[1001],jdg[1001]; int main() { cin>>n>>m; for(int i=1;i>a>>b>>c; ... 阅读全文
posted @ 2018-07-08 17:30 radishえらい 阅读(90) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include using namespace std; int m,n,ans,a[501],b[501],dp[501][501],pre[501][501],lcis[501]; int main() { scanf("%d",&n); for(int i=1;ib[j]&&dp[i... 阅读全文
posted @ 2018-07-08 17:29 radishえらい 阅读(145) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include using namespace std; int n,m,jdg[5001],cnt,ans; struct uio{ int from,to,que; }road[200001]; int find(int x) { if(x==jdg[x]) retur... 阅读全文
posted @ 2018-07-08 17:28 radishえらい 阅读(110) 评论(0) 推荐(0) 编辑
摘要: //EK 最小费用最大流 //只需将最大流中的bfs改为SPFA即可 //注意 若要跑最大费用最大流 只需在加边时将正反边费用分别取反 //跑完最小费用最大流后把mincost取反即可 #include #include #include #include #include #include #include #define ll long long #define ull unsigned... 阅读全文
posted @ 2018-07-08 17:27 radishえらい 阅读(142) 评论(0) 推荐(0) 编辑
摘要: //dinic 最大流 //head[x]从0开始记 这样便于找反向边 异或即可 //当前弧优化 #include #include #include #include #include #include #include #define ll long long #define ull unsigned long long #define INF 0x3f3f3f3f using nam... 阅读全文
posted @ 2018-07-08 17:27 radishえらい 阅读(114) 评论(0) 推荐(0) 编辑
摘要: //树链剖分 //将最短路上的区间分成若干条链 使得每一条链上的操作都能用线段树解决 //分轻重 重儿子为某节点的儿子中儿子最多的子节点 重儿子之间的边为重边 重边相连即为重链 #include #include #include #include #include #include using namespace std; int n,m,root,MOD,dot[100001],dot... 阅读全文
posted @ 2018-07-08 17:25 radishえらい 阅读(102) 评论(0) 推荐(0) 编辑
摘要: //树状数组 //支持给某位置增加常数与查询前缀和 #include #include #include #include #include #include using namespace std; int n,a[1001],tree[1001];//tree树状数组 int lowbit(int x)//表示2^k k是二进制数x的末尾0个数 { return x&(-x); ... 阅读全文
posted @ 2018-07-08 17:25 radishえらい 阅读(92) 评论(0) 推荐(0) 编辑
摘要: //双重Hash 可保证不重复 //空间较大 时间较慢 不易被卡 #include #include #include #include #include #include #define MOD1 233333339 #define MOD2 233333393 #define MOD3 233333939 #define base 233 #define ull unsigned long... 阅读全文
posted @ 2018-07-08 17:25 radishえらい 阅读(144) 评论(0) 推荐(0) 编辑