![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
The sunshine。
实在是太菜了 记忆力也不太好,,我还是写博客记录一下吧wuwuwuwu
展开
-
treap-->平衡树的一种
啊啊啊啊啊!!!!有关平衡树的知识补完了啊!!!!treap。。。。二叉查找树和堆的结合体treap基本操作:push_up函数//push_up函数inline void push_up(int x){ size[x] = siz[son[x][0]] + siz[son[x][1]] + cnt[x];}旋转操作//旋转操作inline void rotate(int &x,int y){ int ii = son[x][y ^ 1]; son[x][y ^ 1] =原创 2021-05-14 17:58:45 · 62 阅读 · 0 评论 -
带修改的莫队算法
板子://莫队算法种类好多啊,说到底它类似平方分割嘛//资瓷修改的莫队算法#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;int n,m;int a[maxn];int原创 2021-05-14 15:59:07 · 67 阅读 · 0 评论 -
莫队算法基础和普通莫队
(描述:我是谁,我在哪?开玩笑,本来我现在应该写5级题的,但是最近有几个算法经常在我眼前晃悠,splay,莫队算法,还有昨天晚上zjx学长告诉我的悬线法,让我非常的好奇,另外就是5级题有些知识内容不会,没办法写,所以我现在也在补算法知识,顺便了解一下)莫队算法:1.莫队算法的核心代码(挪动的方式):/*1.一般挪动方式,复杂度O(n*m)*/inline void add(int x){//添加 cnt[x]++; if(cnt[x] == 1) ans++;}inline void de原创 2021-05-14 15:01:56 · 62 阅读 · 0 评论 -
Splay板子(伸展树-->平衡树的一种)
一般旋转操作/*一般旋转操作*/void rotate(int x){ int y = t[x].ff;//x的父亲 int z = t[y].ff;//x的父亲的父亲 int k = t[y].ch[1] == x;//x是y的哪一个儿子,0是左儿子,1是右儿子。 t[z].ch[t[z].ch[1] == y] = x;//z的原来的y位置变成x t[x].ff = z;//更新父节点 t[y].ch[k] = t[x].ch[k^1];//x的 与x原来在y的相对的那个儿子 变成原创 2021-05-13 20:28:24 · 103 阅读 · 0 评论 -
Crane POJ - 2991(线段树 + 计算几何)
题意:有一台起重机,我们把起重机看成由N条线段构依次首尾相接而成,第i条线段的长度为Li,最开始,所有线段都笔直朝上。有C条操作指令,指令i给出两个整数Si和Ai,效果是使线段Si和Si+1之间的角度变成Ai度,其中角度指的是从线段Si开始沿逆时针方向旋转到Si+1所经过的角度,最开始时所有角度都是180度按顺序执行C条指令,在每条指令执行之后,输出起重机的前端即第N根线段的端点坐标,假设起重机的支点的坐标为(0,0)。思路:线段树 + 计算几何代码实现:#include<cstdio&原创 2021-04-22 13:06:08 · 100 阅读 · 0 评论 -
数据结构_并查集(合并)
题意:现在有n个人,要挑选出来一些人(也可以是0)组成一组, 最初的friendly value是0,如果由x和y是朋友,而且他们在一组,value值就可以加1,但是如果这对朋友只有其中一个人在这个组,那么value值就会减1,如果最终有k个人组成一组,那么最终value值减k就是结果。问: 可以得到的最大的value值是多少??Input(输入)The first line of the input gives the number of test cases, T (1≤T≤104). T te原创 2021-01-07 23:24:58 · 64 阅读 · 0 评论 -
数据结构_叶子节点的增删
EOJ Monthly 2021.1 Sponsored by TuSimpleC. 魔树题意:第 0年,Cuber QQ 种下了一棵魔树。这是一棵有 n个结点的有根树,它的根为 1 号结点。接下来 m 年,每年 Cuber QQ 都会施展魔法来改变这棵树。有两种魔法:A k:对于树中的每个叶子,让它长出 k 个并排的孩子;D: 对于树中的所有叶子,将它们删除。有根树的叶子是指没有孩子的点。注意对于操作完的树,它的叶子集合可能会改变。现在你知道了 Cuber QQ 每年施展的魔法。你想要预原创 2021-01-05 10:05:40 · 301 阅读 · 0 评论 -
数据结构_最小表示法
题意:1282 时钟有N个时钟,每个时钟有M个指针,P个刻度。时钟是圆形的,P个刻度均分整个圆。每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同。你可以任意旋转时钟的表盘,但是你不能转指针。问最后有多少对时钟可以变成相同的状态。例如:N = 5,M = 2,P = 4,5个时钟的数据如下{1, 2} {2, 4} {4, 3} {2, 3} {1, 3}经过旋转后。 其中(1, 3), (1, 4), (2, 5) 和 (3, 4)是相同的。给出所有时钟的数据,求有多少对时钟原创 2020-12-11 21:07:13 · 172 阅读 · 0 评论 -
数据结构_并查集(不是带权的,误判了)
题意:1307 绳子与重物1.0 秒 131,072.0 KB 40 分 4级题有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci。每条绳子或挂在别的绳子下或直接挂在钩子上(编号-1)。如果绳子下所有重物的重量大于绳子的最大负重就会断掉(等于不会断)。依次给出每条绳子的负重Ci、重物的重量Wi以及绳子会挂在之前的哪条绳子的下面,问最多挂多少个绳子而不会出现绳子断掉的情况。例如下图:5, 2, -13, 3, 06, 1, -13, 1, 03, 2原创 2020-12-11 14:10:31 · 69 阅读 · 0 评论 -
数据结构_单调栈(半熟成果)
题意:1255 字典序最小的子序列给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件:1、包含字符串中所有出现过的字符各1个。2、是所有满足条件1的串中,字典序最小的。例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,字典序最小的为abdc。输入输入1行字符串S,所有字符均为小写,字符串的长度为L。(1 <= L <= 100000)。输出输出包含S中所有出现过的字符,每个字符各1个,并且字典序最小的S的子序列。输入样例babbdcc原创 2020-12-08 20:54:44 · 66 阅读 · 0 评论 -
数据结构_优先队列+贪心
题意:1191 消灭兔子有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 <= i <= M)。假设每种箭只能使用一次,每只免子也只能被射一次,计算要消灭地图上的所有兔子最少需要多少Q币。如不能杀死所有兔子,请输出No Solution。特别说明:1、当箭的伤害值大于等于兔子的血量时,能将兔子杀死;2、血量B[i],箭的伤害值D[i],箭的价格P[i],均小于等于100000。输入第1行:两个整数N原创 2020-12-07 19:12:00 · 185 阅读 · 0 评论 -
数据结构_单调栈+巧妙预处理
题意:给出1个M*N的矩阵M1,里面的元素只有0或1,找出M1的一个子矩阵M2,M2中的元素只有1,并且M2的面积是最大的。输出M2的面积。输入:第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。输出:输出最大全是1的子矩阵的面积。输入样例3 31 1 01 1 10 1 1输出样例4思路:1.预处理部分直接说吧(1)比如一个矩阵1 1 01 1 10 1 1(2)对于一行原创 2020-12-07 12:41:46 · 97 阅读 · 0 评论 -
数据结构_基环树
题意给一个n个点n条边的无向图(基环树特点嘤嘤嘤),找出有多少不同的简单路径。。。什么是简单路径,就是连接两个点的一条通路,但是如果只有方向不同,那么两条被视为一条简单路径。。思路分类讨论:1.如果两个点都在环上,顺时针可以,逆时针也可以,ans = ans + 2;2.如果一个点在环上,一个不在环上,而且不在同一棵树上,两条路径,经过环的时候顺时针走,逆时针走都可以,所以,ans = ans + 2;3.如果在同一棵树上,那就只有一条,ans = ans + 1;然后我们可以发现,只有在同一原创 2020-12-05 10:15:53 · 191 阅读 · 0 评论