随笔分类 -  算法合集 / 数据结构

摘要:定义 线性基用于解决类似于: "给定 n 个数, 取任意个数, 使得异或值最大"此类问题 本质上还是求出多个数最大和最小的异或和,由于给出的数目较大, 如果直接一一比较的话时间复杂度较大,可以通过线性基优化, 假如有 n 个, 其中最大的数二进制位数为 m 位, 那么线性基可 阅读全文 »
posted @ 2024-07-30 03:04 o-Sakurajimamai-o 阅读(16) 评论(0) 推荐(0) 编辑
摘要:引言 第一次接触树链/重链剖分的时候还是学习 Lca, 没系统性的看过剖分, 今天刚重新学习了一下, 还是比较神奇的, 没想到一个树形结构能有这么多种神奇的操作, 总的来说, 树链剖分还是比较重要的一个策略 正文 定义 先给出图示 首先我们给出以下几个定义: 重儿子, 对于一个非叶子节点, 阅读全文 »
posted @ 2024-07-14 19:47 o-Sakurajimamai-o 阅读(28) 评论(0) 推荐(0) 编辑
摘要:介绍 点分治, 作为一种统计带权树简单路径长度的暴力分治算法, 其分治方法非常的巧妙, 可以将暴力的 O(n2) 优化到 O(nlogn) 先看问题: 在一个带权树上, 统计两个点的简单路径长度不超过 k 的路径个数 这就是 模板题1 POJ1741 首先还是考虑如何使用暴 阅读全文 »
posted @ 2024-07-12 03:17 o-Sakurajimamai-o 阅读(60) 评论(0) 推荐(0) 编辑
摘要:基环树简单介绍 目录#1.0 啥是基环树?#1.1 无向图上的基环树#1.2 有向图上的基环树#1.2.1 内向树#1.2.2 外向树#2.0 基环树的一般处理思路#2.1 大体方法#2.2 找到环#2.2.1 思路#2.2.2 代码实现#2.3 剩下的操作#3.0 例题#3.1 [IOI2008] 阅读全文 »
posted @ 2024-06-11 12:56 o-Sakurajimamai-o 阅读(16) 评论(0) 推荐(0) 编辑
摘要:对于树上的两点之间的简单路径,求经过边权值的最大异或和 首先考虑一个点到根节点所经过路径的异或和,可以深搜求出 考虑两点简单路径的异或和,其值一定是两个点分别到根节点的异或和的异或,那么此时我们已知一个点,如果求出另一个点使得两点之间的异或和最大呢? 考虑字典树存取,深搜完之后,将每个点到根节点的异 阅读全文 »
posted @ 2024-06-07 17:31 o-Sakurajimamai-o 阅读(30) 评论(0) 推荐(0) 编辑
摘要:重构一下线段树的博客,关于线段树的相关定义以及证明过段时间再补 首先是一个简单线段树,这里叫做伪线段树,其实本质就是一个二叉树,仅能支持单点操作: 单点修改 + 区间查询 // 单点修改查询 // http://ybt.ssoier.cn:8088/problem_show.php?pid=1549 阅读全文 »
posted @ 2024-05-27 23:58 o-Sakurajimamai-o 阅读(22) 评论(0) 推荐(0) 编辑
摘要:树状数组三倍经验 P1637 三元上升子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Enemy is weak - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) The Battle of Chibi - 洛谷 | 计算机科学教育新生态 (luogu.co 阅读全文 »
posted @ 2024-04-26 16:19 o-Sakurajimamai-o 阅读(9) 评论(0) 推荐(0) 编辑
摘要:先挂个板子: #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; mt19937 sj(114514); struct node{ int l,r,key, 阅读全文 »
posted @ 2024-04-21 18:04 o-Sakurajimamai-o 阅读(20) 评论(0) 推荐(0) 编辑
摘要:什么时候用分块? 当你发现正常数据结构无法解决的时候(比如维度特别多,很不方便或者炸空间),或者复杂到要3个 log 以上才能解决时。(主要还是得看数据范围,分块的做法一般都是 O(n) 及以上的 如何分块? 定一个块长 B ,整个序列就会被分成 \floorn/B 阅读全文 »
posted @ 2024-04-15 10:47 o-Sakurajimamai-o 阅读(10) 评论(0) 推荐(0) 编辑
摘要:以为自己一辈子接触不到的算法,本来以为很高深,没想到是优雅的暴力,太绝妙了 对于多个区间查询,例如区间最大值等,我们考虑暴力,枚举区间 [L,R],取最大值即可,时间复杂度 O(m(RL)),跑不起,所以我们借用数据结构,单调队列,树状数组等等,但是如果此时我们考虑优化暴露 首先我们这样 阅读全文 »
posted @ 2024-03-27 12:01 o-Sakurajimamai-o 阅读(11) 评论(0) 推荐(0) 编辑
摘要:首先是单调队列: 其实单调队列就是一种队列内的元素有单调性(单调递增或者单调递减)的队列,答案(也就是最优解)就存在队首,而队尾则是最后进队的元素。因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的。 类似于滑动窗口等,单调队列具有时序性的储存区间最大值或 阅读全文 »
posted @ 2024-02-06 16:36 o-Sakurajimamai-o 阅读(17) 评论(0) 推荐(0) 编辑
摘要:【动态规划】滚动数组的求解(C++) - 林、Zephyr - 博客园 (cnblogs.com) 【精选】滚动数组(简单说明)_儒rs的博客-CSDN博客 //https://www.luogu.com.cn/problem/P2679 /* # 定义状态 # 对于任意一个 0 <= i <= n 阅读全文 »
posted @ 2023-11-12 15:21 o-Sakurajimamai-o 阅读(28) 评论(0) 推荐(0) 编辑
摘要://https://www.luogu.com.cn/problem/P3865 //类似于动态规划和压状dp //f[i][j]是从i位置开始到i+2^j-1的区间内的最大值,一步一步更新所有区间的最大值 //有距离限制,即到达某一位置时,j可能过大导致越界,所以对与每个i,有区间属于:[1,n- 阅读全文 »
posted @ 2023-09-25 15:15 o-Sakurajimamai-o 阅读(94) 评论(0) 推荐(0) 编辑
摘要:声明一个multiset,按升序排列,默认升序排列 multiset<int>set1; 等价于: 或 multiset<int,less<int>>set1; 声明一个multiset,按降序排列 multiset<int, greater<int>>set1; 函数 用法 作用insert() 阅读全文 »
posted @ 2023-09-06 14:07 o-Sakurajimamai-o 阅读(12) 评论(0) 推荐(0) 编辑
摘要:节点(Node):树形结构中的基本单位,可以表示数据元素或对象。节点可以包含一个或多个子节点。 根节点(Root Node):树的顶层节点,它没有父节点,是整个树的起点。 子节点(Child Node):树中每个节点都可以有零个或多个子节点,子节点是位于其父节点下方的节点。 父节点(Parent N 阅读全文 »
posted @ 2023-09-05 12:14 o-Sakurajimamai-o 阅读(59) 评论(0) 推荐(0) 编辑
摘要:调了整整5个小时,结果发现自己建树的方式有误,气死我了气死我了,比较好的一道线段树(虽然我不会 #include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n,m,res,point; vector<int>v[2]; / 阅读全文 »
posted @ 2023-08-13 13:38 o-Sakurajimamai-o 阅读(52) 评论(0) 推荐(0) 编辑
摘要:树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。使得以该节点为根的子树中,最大子树高度最小的节点 //会议 //https://www.luogu.com.cn/problem/P1395 // f数组:f数组用于记录以每个节 阅读全文 »
posted @ 2023-08-06 10:25 o-Sakurajimamai-o 阅读(15) 评论(0) 推荐(0) 编辑
摘要://单点修改查询 //http://ybt.ssoier.cn:8088/problem_show.php?pid=1549 //https://www.luogu.com.cn/problem/P1198 //用一维数组来存,当作完全二叉树来存 #include<bits/stdc++.h> us 阅读全文 »
posted @ 2023-07-22 11:46 o-Sakurajimamai-o 阅读(8) 评论(0) 推荐(0) 编辑
摘要://树状数组 //利用lowbit函数将区间划分为以二进制结尾的长度的小区间,然后利用这些小区间相加,减少时间复杂度 //树状数组的本质就是前缀和+可修改区间,求单点前缀和,如果是求某一的区间和,需要稍加修改,下面有类似例题,维护前缀和还有i*前缀和就可以 //也就是说树状数组就是更快一点的前缀和, 阅读全文 »
posted @ 2023-07-20 14:54 o-Sakurajimamai-o 阅读(3) 评论(0) 推荐(0) 编辑
摘要:kmp算法用于优化字符串匹配效率: //KMP字符串匹配: //模板: #include<bits/stdc++.h> using namespace std; const int N=1e6+10; char s1[N],s2[N]; int ne[N],n,res; int main() { s 阅读全文 »
posted @ 2023-06-18 20:34 o-Sakurajimamai-o 阅读(20) 评论(0) 推荐(0) 编辑

-- --
点击右上角即可分享
微信分享提示