随笔分类 -  算法合集 / 基础算法

摘要:对于树上的两点之间的简单路径,求经过边权值的最大异或和 首先考虑一个点到根节点所经过路径的异或和,可以深搜求出 考虑两点简单路径的异或和,其值一定是两个点分别到根节点的异或和的异或,那么此时我们已知一个点,如果求出另一个点使得两点之间的异或和最大呢? 考虑字典树存取,深搜完之后,将每个点到根节点的异 阅读全文 »
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) 编辑
摘要:kmp 想必大家都不陌生,这里先贴个模板hh 从0开始: for (int i = 1, j = 0; i < s2.length(); i++) { while (j && s2[i] != s2[j]) j = ne[j - 1]; if (s2[i] == s2[j]) j++; ne 阅读全文 »
posted @ 2024-05-26 12:05 o-Sakurajimamai-o 阅读(13) 评论(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) 编辑
摘要:逆序对定义:对于给定的一段正整数序列,逆序对就是序列中 a_i>a_ji<j 的有序对。 P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> #define int long long usi 阅读全文 »
posted @ 2024-01-24 16:12 o-Sakurajimamai-o 阅读(23) 评论(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) 编辑
摘要:# 跑路 ## 题目描述 小 A 的工作不仅繁琐,更有苛刻的规定,要求小 A 每天早上在 6:00 之前到达公司,否则这个月工资清零。可是小 A 偏偏又有赖床的坏毛病。于是为了保住自己的工资,小 A 买了一个空间跑路器,每秒钟可以跑 2k 千米(k 是任意自然数)。当然,这个机器是用 阅读全文 »
posted @ 2023-09-17 16:31 o-Sakurajimamai-o 阅读(16) 评论(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) 编辑
摘要:# 逛画展 ## 题目描述 博览馆正在展出由世上最佳的 m 位画家所画的图画。 游客在购买门票时必须说明两个数字,ab,代表他要看展览中的第 a 幅至第 b 幅画(包含 a,b)之间的所有图画,而门票的价钱就是一张图画一元。 Sept 希望入场后可以看到所有名师的图画。 阅读全文 »
posted @ 2023-07-19 17:22 o-Sakurajimamai-o 阅读(26) 评论(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) 编辑
摘要:最近碰到的二分题有点多,而且方法都不同,拿来说一下,顺便给自己做下总结 模板1: while (l < r) { int mid = l + r >> 1; //(l+r)/2 if (check(mid)) r = mid; // check()判断mid是否满足性质 else l = mid + 阅读全文 »
posted @ 2023-06-17 13:59 o-Sakurajimamai-o 阅读(59) 评论(0) 推荐(0) 编辑
摘要:【日报】差分与前缀和,但是加上了一些拓展 - 白色过膝袜 - 洛谷博客 (luogu.com.cn) 预计学习时间: 一天 因为发现有好多题目都需要利用前缀和还有差分来进行优化,所以要花一天的时间把这种基础算法学完. //前缀和: //二维前缀和: //1-1 激光炸弹: https://www.l 阅读全文 »
posted @ 2023-06-16 22:25 o-Sakurajimamai-o 阅读(17) 评论(0) 推荐(0) 编辑
摘要:1 前缀和 /// 给定一组数,求任意区间的总和 #include<bits/stdc++.h> using namespace std; const int N=100010; int n,a[N],s[N],m; int main() { cin>>n>>m; for(int i=1;i<=n; 阅读全文 »
posted @ 2023-05-24 13:01 o-Sakurajimamai-o 阅读(9) 评论(0) 推荐(0) 编辑

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