树
算法的数论
skyyemperor
hello!!远方的朋友,很幸运,遇见你。
个人博客网站 https://blog.skyemperor.top 欢迎来访。。
展开
-
主席树
分析一、 离散化int getId(int x) { return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;} for (int i = 1; i <= n; i++) { sc(a[i]); v.push_back(a[i]); } sort(v.begin...原创 2020-02-20 09:25:35 · 107 阅读 · 0 评论 -
最小生成树
分析克鲁斯卡尔算法算法思想:将所有边按照边权最小到大排序,依次枚举所有的边,如果边的两个端点已经在同一个集合中(可连通),就continue,否则合并边的两个端点(将边权加入到答案中),直到有n-1条边参与合并为止。最后如何判断这个生成的子图是不是树?代码#include<iostream>#include<stdio.h>#include<...原创 2020-02-20 09:24:45 · 92 阅读 · 0 评论 -
树状数组
一、 树状数组介绍黑色数组代表原来的数组(下面用A[i]代替),红色结构代表我们的树状数组(下面用C[i]代替),发现没有,每个位置只有一个方框,令每个位置存的就是子节点的值的和,则有 C[1] = A[1]; C[2] = A[1] + A[2]; C[3] = A[3]; C[4] = A[1] + A[2] + A[3] + A[4]; C[5] = A[5]; C[6...原创 2020-01-22 18:10:43 · 115 阅读 · 0 评论 -
Lazy Tag 查询Sum && 区间更新
1.Lazy Tag 查询Sumvoid pushdown(int sn) { if (node[sn].add != 0) { node[sn * 2].add += node[sn].add; node[sn * 2 + 1].add += node[sn].add; node[sn * 2].sum += node[sn].add...原创 2020-01-21 13:01:40 · 113 阅读 · 0 评论 -
建树 && 单点更新 && 查询最高
目录题目:题目分析: 一、 build 二、 查询最高的成绩: 三、 更新最大值四、 若单点更新值,求sum 题目:本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。学...原创 2020-01-21 12:05:34 · 143 阅读 · 1 评论 -
并查集
一、题目输入以整数T(1<=T<=25)开始,表示测试用例的数量。接下来是T个测试用例。每个测试用例以两个整数N和M(1<=N,M<=1000)开头。N表示朋友的数量,从1到N标记朋友,然后M行跟随。每一行包含两个整数A和B(A!=B),意思是朋友A和朋友B互相认识。两个案子之间会有一个空行。不认识的朋友不在一张桌子,求至少需要多少桌子。二、解析找到x的掌门人i...原创 2020-02-20 09:20:31 · 71 阅读 · 0 评论