数据结构
文章平均质量分 55
ACM数据结构
明月千里赴迢遥
这个作者很懒,什么都没留下…
展开
-
线段树简单笔记
一 经典线段树结构:权值为[L,R]的区间和int L,R,sum;操作1 单点修改O(logn)递归找到相应叶子节点,回溯时修改父节点(两个儿子总和)操作2 区间查询O(logn)左右两边递归,递归边界为左右两边都被包含,累加其权值最坏耗时4logn区间修改需要懒标记,蓝桥杯一般考不到,即使考到也是特殊区间修改,用不到函数1 pushup 用子节点信息更新当前节点信息2 build 在一段区间上初始化线段树3 modify 单点修改4 query 区间查询静态链表存储,空原创 2022-03-20 12:39:28 · 724 阅读 · 0 评论 -
树状数组简单总结(原理见以往帖子)
树状数组:快速(动态)求前缀和在线算法(支持修改)O(logn) 1:给某个位置上的数加上一个增量(修改某个元素)2:求某个前缀和即:单点修改,区间查询(sum(r)-sum(l-1))树状数组只能支持这俩问题,别的问题都得通过转化才能解决比如区间修改,单点查询需要利用差分转化为区间修改记树状数组为C[x],定义:C[x]=(x-lowbit[x],x],即x-lowbit[x]+1~x,奇数为其本身lowbit[x]=x&-x,含义是2^k,k为x...原创 2022-03-15 00:12:02 · 503 阅读 · 0 评论 -
在函数中修改指针需要传入二级指针
参考文献如果忘记这一点写链表将寸步难行转载 2021-10-17 23:36:51 · 149 阅读 · 0 评论 -
并查集判断成环 HDU 1272
加入边前判断两个节点是否根节点相同,如果相同那么成环,如果不同合并他们比如1-2,1-3,2-3,加入2-3时2和3已经同属一个并查集了,成环例题 HDU 1272原创 2021-09-09 16:08:54 · 304 阅读 · 0 评论 -
POJ 2182 普通权值线段树求第k小
模板写错了,研究了一个多小时,哭死int kth(int root,int start,int end,int k) {//查询第k小值是多少 if(start==end) return start; int mid=(start+end)>>1,s1=tree[lson],s2=tree[rson]; if(k<=s1) return kth(lson,start,mid,k);//向左子树搜索 else return kth(rson,mid+1,end,k-原创 2021-08-31 03:10:32 · 401 阅读 · 0 评论 -
HDU 5249解题报告 权值线段树+动态开点+队列模拟
https://acm.hdu.edu.cn/showproblem.php?pid=5249易错点管道头部是后进先出的由于样例没有体现这一点,我想当然的以为是先进先出,然后……浪费了几个小时不过这几个小时我加深了对权值线段树的理解,也算是塞翁失马吧值域从0开始这个一定要注意解题思路 in x": 代表重要值为x(0≤x≤109) 的请求被推进管道。 "out": 代表服务拉取了管道头部的请求。 "query: 代表我想知道当前管道内请求重要值的中间值....原创 2021-08-20 21:27:46 · 195 阅读 · 1 评论 -
字典树 HDU1251 HDU 5687
模板解决了四个问题,插入,查询是否存在这个单词,查询以这个字符串为前缀的单词数量,查询这个单词是否有前缀https://leetcode-cn.com/problems/implement-trie-prefix-tree/solution/trie-tree-de-shi-xian-gua-he-chu-xue-zhe-by-huwt/https://blog.csdn.net/qq_43906740/article/details/96474307?utm_medium=distribute.p原创 2021-08-19 02:24:16 · 89 阅读 · 0 评论 -
AC自动机模板
https://www.cnblogs.com/hyfhaha/p/10802604.html易错点多组数据初始化时,cnt要初始化为1,用完之后要对trie的son数组清0,其他可以不清0但是son必须清0,这个会影响拓扑和fail!如果RE,一定是trie开小了,这样cnt++才会访问越界,而不是s,T之类的开小了#include<cstdio>//https://www.cnblogs.com/hyfhaha/p/10802604.html#include<io.原创 2021-08-21 18:08:37 · 92 阅读 · 0 评论 -
后缀数组 注释详细
特别鸣谢党哥的PPT和精彩讲解概念介绍 后缀 后缀数组可以解决大部分的字符串问题,如查找子串,最长重复子串,最长公共子串等。后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串r的从第i个字符开始的后缀表示为Suffix(i),也就是Suffix(i)=S[i…len(S)-1]。比如 abcdefg 的suffix(5)就是fg。 后缀树 例S=“vamamadn”(因树的建立比较麻烦,用数组替代) 后缀数组 后缀数组(SA[i]存放排名第i大的原创 2021-08-21 04:02:16 · 697 阅读 · 1 评论 -
并查集总结
目录普通并查集带权并查集种类并查集可持久化并查集普通并查集解决的问题:朋友的朋友是朋友解题报告:https://blog.csdn.net/qq_54886579/article/details/119395026模板#include<cstdio>#include<iostream>using namesapce std;/*并查集: 合并(Union)、查找(Find)、集合(Set) 1 合并: 合并两个集合2 查找: 判断两个元原创 2021-08-17 23:24:31 · 177 阅读 · 0 评论 -
可持久化并查集
模板题https://www.luogu.com.cn/problem/P3402可持久化数组+并查集=可持久化并查集,下面为合成思路并查集是fa[]数组 初始状态下fa[i]=i1 a b 合并 a,b所在集合;先查找fa[a]和fa[b]再判断fa[a]和fa[b]的秩,令秩小的当fa[a]之后对fa[a]进行一次修改,将其更新为fa[b]r[i]=update(1,n,root,fa[a],fa[b]);最后修改深度,如果rank[a]==rank[b],rank[b]++,否原创 2021-08-17 23:15:52 · 97 阅读 · 0 评论 -
可持久化数组
原理https://www.cnblogs.com/liuwenyao/p/10994589.html模板#include <iostream>//可持久化数组 https://www.cnblogs.com/liuwenyao/p/10994589.html #include <cstdio>//板子题https://www.luogu.com.cn/problem/P3919 #include <algorithm>//版本号从0开始 a[]数组从1原创 2021-08-17 17:09:47 · 98 阅读 · 0 评论 -
滑动窗口题解Poj 2823 单调队列数组实现
http://poj.org/problem?id=2823模拟n=8 k=31 3 -1 -3 5 3 6 7先求最大值,用单调递减队列,输出队头head=1,这样q[head]就直接是队首元素下标了h=1 t=0i=1 1 空队列,1入队 h=1t=1 i=2 3 1<3出队 h=1t=1i=3 3 -1 3>-1,-1入队 i>=k,输出队头3i=4 3 -1 -...原创 2021-08-03 21:53:32 · 206 阅读 · 0 评论 -
HDU 1394 树状数组求逆序数
注释详细,如有疑惑请移步树状数组总结/*求逆序数 A[i]默认值为0,一个数加入序列使A[i]+=1,表示该数出现,求i的前缀和相当于求比i小的数的数目s 那么比i大的数为n-1-s,n为加入该数后当前序列数量,用动态规划的方式一个个加入数求总逆序*/#include<iostream>#include<cstdio>#include<string>#include<cstring>using namespace std;const原创 2021-08-09 14:31:52 · 119 阅读 · 0 评论 -
带权并查集 HDU 3038
#include<cstdio>#include<iostream>using namespace std;const int N=1e6+1;int father[N];//并查集用数组实现,根节点的话father[i]=iint value[N];//记录权值 void inf(int n)//初始化 { for(int i=1;i<=N;i++) father[i]=i;}int findFather(int x)//路径压缩 { if (x !.原创 2021-08-05 02:30:09 · 198 阅读 · 0 评论 -
POJ 3264 Balanced Lineup ST表(区间最值问题RMQ)
问题翻译对于每天的挤奶,农夫约翰的N头奶牛(1≤N≤50,000头)总是按照相同的顺序排着队。一天,农夫约翰决定和一些奶牛组织一场极限飞盘游戏。为了简单起见,他将从挤奶队伍中挑选连续的奶牛来玩游戏。然而,对于所有的奶牛来说,它们的身高不应该相差太多。Farmer John列出了Q(1≤Q≤20万)潜在牛群及其身高(1≤身高≤1,000,000)。对于每一组,他希望你帮助确定组中最矮的奶牛和最高的奶牛之间的身高差异。输入第1行:两个用空格分隔的整数N和Q。行2 . .N+1:第i+1行原创 2021-08-04 15:04:19 · 186 阅读 · 0 评论 -
POJ 3468区间修改区间查询
这题不讲武德,说好的Ai<=1e9,在int范围内,结果初始值竟然需要用到long long不然过不了不讲武德//区间修改、区间查询 http://poj.org/problem?id=3468#include<cstdio>#include<iostream>using namespace std;const int N=1e6+10;typedef long long ll;ll A[N],C[N],D[N],tree1[N],tree2[N];//C原创 2021-08-07 23:52:18 · 100 阅读 · 0 评论 -
How Many Tables 普通并查集
天是伊格那丢的生日。他邀请了很多朋友。现在该吃晚饭了。伊格那丢想知道他至少需要多少张桌子。你要注意,并不是所有的朋友都认识彼此,所有的朋友都不想和陌生人呆在一起。这个问题的一个重要规则是如果我告诉你A认识B, B认识C,这意味着A B C彼此认识,所以它们可以留在一个表中。例如,如果我告诉你A知道B, B知道C, D知道E,那么A, B, C可以留在一个表中,而D, E必须留在另一个表中。所以伊格那丢至少需要两张桌子。输入以整数T(1<=T<=25)开始,表示测试用例的数量。然后是.原创 2021-08-04 22:45:36 · 156 阅读 · 0 评论 -
POJ 1166 敌兵布阵 单点更新 区间求和 树型数组
#include<cstdio>#include<iostream>#include<cstring>#include<string>using namespace std;const int N=5e4+10;int tree[N],a[N];inline int lowbit(int x){ return x&(-x);}void updata(int x,int value,int n){ while(x<=n){.原创 2021-08-07 03:15:29 · 87 阅读 · 0 评论 -
C++ 操作符优先级问题 三目运算符右结合问题
运算符优先级三目运算符右结合说明转载 2021-08-05 23:36:22 · 520 阅读 · 0 评论 -
P1525 [NOIP2010 提高组] 关押罪犯 种类并查集 思路剖析
https://www.luogu.com.cn/problem/P1525思考:为什么匹配到仇恨值最大的朋友(敌人的敌人)输出的仇恨值最低?答案:所谓朋友,就是分配在同一座监狱,所谓敌人,就是分配在不同的监狱既然他们是朋友了,也就是说由前置条件已经无法再分到不同的监狱了,即使这对朋友仇恨值最大,也没办法了,所以他们的仇恨值就是最小的最大仇恨值分配方案从代码的角度:if(Find(x) == Find(y)) { printf("%d\n", a[i].c); break;...原创 2021-08-05 18:15:38 · 163 阅读 · 0 评论 -
POJ 1182 食物链 种类并查集 三种
POJ 1182重要思路如下图所示,细节见代码注释,不懂的见往期博客关于并查集的文章文字版动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 设A是同类,B是食物,C是天敌 同类吃食物 食物吃天敌 天敌吃同类 思路:开3N的并查集,1~N是同类,N+1~2N是食物,2N+1~3N是天敌 即 x本身为i(i∈[1,n]) x的食物为i+n x的天敌为i+2*n 这是种类并查集的性质1 重难点1:合并算法 {...原创 2021-08-06 01:12:00 · 112 阅读 · 0 评论 -
Bad Hair Day Poj 3250 单调栈模板题
10 3 7 4 12 2逆向思维,求每头牛被其他牛看到的数量cnt=0i=0 10 cnt+=0 i=1 10 3 单增栈 cnt+=1 cnt=1i=2 10 3 7->10 7 cnt+=1 cnt=2i=3 10 7 4 cnt+=2 cnt=4i=4 10 7 4 12->12 cnt=4i=5 12 2 cnt=5算法抽象:维护单增栈,cnt+=stack.size()-1陷阱 等高看不到10 10一个都看不到10 5 10答案应为...原创 2021-08-03 23:55:11 · 82 阅读 · 0 评论 -
普通线段树总结
优点:修改快,求和快对于某一类问题,我们主要关注的是一个线段或者区间。对于给定区间,更新区间中一个元素或者一个区间的值,查询一个区间[i,j]的最大值、最小值,或者区间数字和。线段树不一定满二叉树,也不一定是完全二叉树,但一定是平衡二叉树线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二原创 2021-08-08 01:30:30 · 173 阅读 · 0 评论 -
区间修改 单点查询模板题 洛谷P3368
#include<cstdio>#include<iostream>using namespace std;const int N=5e5+10;int n;int A[N],C[N],tree[N];inline int lowbit(int x) { return x&-x;}inline int read() { char c=getchar(); int s=0,w=1; while(c<'0' || c>'9') { if(.原创 2021-08-07 21:45:17 · 73 阅读 · 0 评论 -
魔咒词典题解——牛客
https://www.nowcoder.com/questionTerminal/c6ca566fa3984fae916e6d7beae8ea7f?orderByHotValue=1&mutiTagIds=5058&page=2&onlyReference=false下解在杭电上内存超限过不去,牛客上可以,由于主要是练习map而不是hash,因此先不加深究知识点:i. map的find找不到的话返回值为map.end() find引用具有指定键的元素的位置的...原创 2021-08-03 01:13:24 · 105 阅读 · 0 评论 -
士兵队列训练问题题解(杭电1276)
https://acm.hdu.edu.cn/showproblem.php?pid=1276模拟:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 201 3 5 7 9 11 13 15 17 191 3 7 9 13 15 191 7 13 191 7 19可以用多种方式做,这里用队列做开个flag标志,flag为0按偶数去掉,flag为1按三倍去掉size()<4结束筛选接下来讨论删除设置两个队列,一个个出队,循环操作,遇到待删元.原创 2021-08-02 21:45:45 · 468 阅读 · 0 评论 -
吐泡泡题解
链接:https://ac.nowcoder.com/acm/problem/15029?&headNav=acm来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld题目描述小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)例如原创 2021-08-02 19:43:25 · 1300 阅读 · 1 评论 -
线段树总结(动态开点,zkw,权值,主席)
zkw线段树https://www.cnblogs.com/Judge/p/9514862.html上面这篇文章虽然有些谬误,但总体很棒先上一篇带解析的总代码带解析的总代码//zkw线段树 https://www.cnblogs.com/Judge/p/9514862.html (queryMax和queryMin有错误) #include<cstdio>#include<algorithm>using namespace std;const int N原创 2021-08-10 03:15:58 · 1001 阅读 · 0 评论 -
树状数组总结
https://www.acwing.com/blog/content/513/https://www.cnblogs.com/xenny/p/9739600.html树状数组:用数组来模拟树形结构。用途:解决大部分基于区间上的更新以及求和问题。与线段树的区别:树状数组可以解决的问题都可以用线段树解决,树状数组的系数要少很多,线段树就像 华为荣耀50, 而树状数组就像华为荣耀50的青春版,便宜了,但性能弱了,但对于一些问题性价比更高。第一种: 单点更新 区间求和单点更新:修改数组中..原创 2021-08-06 19:36:17 · 673 阅读 · 0 评论