数据结构
文章平均质量分 86
数据结构
Clarence Liu
https://github.com/ComingCL
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
用 Go 从 100 亿个数中找到最小的 100 个数 —— 实战与原理
目标:数据规模 100 亿(10^10),寻找最小 100 个数(Top-100 Min),在单机/分布式场景下的可行方案与 Go 代码参考。原创 2025-12-30 11:27:52 · 715 阅读 · 0 评论 -
单调队列原理回顾和例题分析
单调队列原理例题优化DP原理单调队列解决的问题的基本模型是滑动窗口问题,也就是给一个数组和一个窗口大小,从左面滑到最右面,问每次滑动的区间最大值和最小值这里只用语言简单描述一下,具体画图可以参考https://zhuanlan.zhihu.com/p/346354943如果是维护区间最大值,用一个双端队列,我们的目的是让队尾元素为区间最大值,每次入队的时候把所有队首元素比当前还小的全部弹出,然后把这个元素放在队首,同时检查队尾元素是否已经超出了窗口,如果超出了窗口,那么全部弹出,最后得到队尾元素就原创 2022-01-23 23:18:24 · 367 阅读 · 0 评论 -
2022牛客寒假算法基础集训营4 B、 G两题
定义子序列权值为子序列最小值和最大值的乘积,问一个数组中所有非空子序列的权值乘积是多少,取模理解题解中所讲的一个长度为kkk的区间,中间的数对答案的贡献是2k−22^{k-2}2k−2,但是此题有更好的办法考虑枚举每一个数,当然首先把它们从小到大排序,设这个数是第iii个,iii从0开始,那么因为已经排好序了,那么它能够对答案造成多少贡献呢?因为贡献一定是这个数是子序列里面的最大值或者是最小值,如果成立为最小值,那么子序列的其他数一定是在这个数后面的某些数或者没有,它后面一共有2n−i−12^{n-i原创 2022-02-10 09:56:19 · 380 阅读 · 0 评论 -
优雅的暴力---数列分块入门
数列分块概述数列分块九题1. 区间加,单点查询2. 区间加,区间小于某个数的数的个数3. 区间加,求前驱4. 区间加,区间求和概述区间问题一般都十分灵活,可以用线段树来解决,虽然时间复杂度可以达到O(log(n))O(log(n))O(log(n)),但是有时候不太好写,分块可以让时间复杂度达到O(n)O(\sqrtn)O(n),虽然不及线段树,但是应用范围也很广,也比较简单,很有学习的必要分块思想很简单,一般把一个区间分成n\sqrt nn块,如下图,如果有剩余部分,这样我们就多加一块原创 2022-01-05 00:06:19 · 378 阅读 · 3 评论 -
hdu6759及单调栈原理学习
单调栈单调栈原理解决初始问题例题这是一个原理比较简单的知识点,关键在于遇到问题能不能想到用这种方法解决,先通过一个问题引入http://acm.hdu.edu.cn/showproblem.php?pid=6759这是去年杭电多校赛第一场的一道题,题目大意是给出nnn个机器人的位置和他们的加速度,初始速度都是000,问它们可能有多少个能够冲到第一的位置,并列第一不算简单分析一下这个问题,刚看到这个问题可能有一个想法是加速度最大的那个人一定会走到第一,初始位置最大的那个人也是第一,但中间位置原创 2021-09-15 11:47:06 · 198 阅读 · 0 评论 -
[SDOI2009]HH的项链 和 [HEOI2012]采花两题树状数组解法对比分析
https://www.luogu.com.cn/problem/P1972HH的项链这个题是静态区间查询的问题,如果用树状数组来解决,那么容易想到的方法是比如说问[l,r]的[l,r]的[l,r]的不同贝壳数量,那么我如果用树状数组维护区间的不同贝壳数,那么答案应该是query(r)−query(l−1)query(r)-query(l-1)query(r)−query(l−1),但是这里带来一个问题,就是[1,l][1,l][1,l]和[1,r][1,r][1,r]这两个区间里面不能有重复的贝壳,否原创 2021-08-26 20:34:47 · 166 阅读 · 0 评论 -
树状数组原理及经典应用问题
树状数组对于数组相信大家并不陌生,那么为什么要在数组前面加上‘树状’二字呢?数组是一种存储结构,树状数组是一种逻辑结构,它巧妙的应用了二进制的某些性质,使得数组的某些区间查询和修改变得非常的快,就像下面这个问题题目链接如果用朴素方法解决这个问题,显然时间复杂度不过关,那么我们采用树状数组的思想来解决这个问题lowbit先看一个重要的函数int lowbit(int x){ return x & -x;}这个函数的作用是找到x所对应二进制数的最后一个1,一个数的负数原创 2021-02-22 13:51:22 · 372 阅读 · 0 评论 -
Treap树概念及应用
Treap树概念实现结构旋转操作左旋和右旋右旋左旋旋转总结插入操作删除操作第K大概念Treap一词是Tree和Heap的合成词,也就是这是一颗带有堆性质的树,即树堆,Treap树是一种排序二叉树(也成二叉搜索树、二分检索树 Binary Serach Tree),简称BST,也就是满足value值大小关系是左孩子<根<右孩子,这样就满足了排序二叉树,刚才讲过,Treap树还满足堆的性质,那么它的哪个值满足堆的性质呢,并不是value,而是一个优先级rank值,这个rank值是人为添加的,一原创 2021-01-30 02:09:34 · 685 阅读 · 1 评论 -
并查集及其优化和练习
我们常常会遇到这样的问题:有一群人,他们有一些人是认识的,假设A认识B,B认识C,那么称A,B,C是属于一个帮派,那么如果已知许多的关系,那么这里面有多少个帮派?问题表述很简单,那么我们应该怎么去解决这样一个问题呢?如果用平凡的解法,不借助...原创 2021-01-13 23:51:19 · 220 阅读 · 0 评论 -
Trie树和01Trie树
Trie树概要插入操作查找操作例题概要字典树又叫前缀树,一般用来存储一些单词或数字,在查找的时候比较方便,由于相同前缀只存储一次,所以也是比较省空间的字典树是一棵树,一般用数组存储比较方便,从根节点出发,根节点不存储字母,每遇到一个字母,先判断树上是不是已经有了,如果有了,就顺着这条路;如果没有,新建立一条路径,直到最后一个字母,这时候将末尾字母所在位置染色,表示这是末尾字母。所以,字典树是一棵多叉树。字典树思想相对比较容易插入操作使用p作为索引,贯穿于整条链,用k来记录节点次序,因为根原创 2021-01-20 00:38:48 · 587 阅读 · 0 评论 -
什么是ST表
ST表引入分析解法DP倍增优化引入最朴素的问题是这样的,给定nnn个数,现在想求出k1k_1k1到k2k_2k2的区间最大值,其中1≤k1≤k2≤n1\leq k_1\leq k_2\leq n1≤k1≤k2≤n这样的问题其实是普遍的,最常见的例子就是高考,所有考生的成绩已经都知道了,如何求某个区间段内的最高分,便于报考分析此类问题都属于RMQ(Range Minimum Query)问题,也就是区间范围最值问题,朴素的方法是forforfor一圈,寻找区间最值,这种方法的问题在于对原创 2021-04-10 16:28:59 · 351 阅读 · 0 评论
分享