随笔分类 - 数据结构算法学习笔记
摘要:继月赛出了道可删除并查集后,又做了几道可删除并查集的题,发现之前的代码有点小问题。 可删除并查集的基本原理是设置一个虚点,也就是说一个点删除了,那么他对应的值就不再是之前的那一个点,而是变成了其他点。 即可删除并查集通过id映射的关系查找我的点在哪里。 有几个问题就是初始化时必须要把$n + m$个
阅读全文
摘要:CDQ分治和整体二分都是基于分治思想的,把复杂的问题拆成许多可以简单求解的子问题,但必须是离线的 普通分治 一维偏序 时间复杂度$O(nlogn)$ 逆序对,树状数组或者归并排序去求 注意用树状数组时离散化一下,即可。先初始化id,然后排完序后再赋值排名就行了 void MergeSort(int
阅读全文
摘要:n个数,区间查询[L,R]出现了几种数字 时间复杂度$O(n\sqrt n)$ 莫队的基本操作就是把n个数进行分块,每一块有$\sqrt n$个,有$\sqrt n$块,然后离线查询,把查询进行排序,按照分块位置排序,如果在同一个分块,那么就按照右区间排序,然后对于每一个排序进行暴力遍历即可 我们开
阅读全文
摘要:权值线段树的功能有 查询x在整个区间出现的次数 查询[L,R]的数字出现的次数 所有数中出现次数第k大的数字 基于线段树和二分的思想 即 定义$int \ tree[maxn];$ tree[i]表示某段区间数字出现的次数 一般需要离散化操作 插入数据 查询第k大数 只需要知道右节点数字出现的次数即
阅读全文
摘要:ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ问题的离线算法。 预处理$O(nlogn)$,查询$O(1)$ 给出一个长度为$N$的数列,和$M$次查询,求出每一次询问的区间内数字的最大值 定义: $st[i][j]$表示从$i$位置开始的$2j$个数中的最大值,即$st[i][j] =
阅读全文
摘要:相比于线段树,节省了很多的内存 特殊用处:求逆序对以及在CDQ分治里嵌套用 一维树状数组 黑色部分代表原来的数组,用$A[i]$表示,红色部分代表树状数组,用$C[i]$表示。 \(C[1] = A[1]\\C[2] = A[1] + A[2]\\C[3]=A[3]\\C[4]=A[1]+A[2]+
阅读全文
摘要:线段树的由来 一般来说,对于[1,n]的操作,修改与统计,复杂度是O(n),但是用先单数优化,可以达到O(log(n)) 比如 题目一: 10000个正整数,编号1到10000,用A[1],A[2],A[10000]表示。 修改:无 统计:1.编号从L到R的所有数之和为多少? 其中1线段树的原理,就
阅读全文

浙公网安备 33010602011771号