2021年5月5日

算法学习(7):单调栈

摘要: 单调栈 单调栈是一种和单调队列类似的数据结构。单调队列主要用于 解决滑动窗口问题,单调栈则主要用于 解决NGE问题(Next Greater Element),也就是,对序列中每个元素,找到下一个比它大的元素。(当然,“下一个”可以换成“上一个”,“比它大”也可以换成“比他小”,原理不变。) 我们维 阅读全文

posted @ 2021-05-05 17:44 小星◎ 阅读(78) 评论(0) 推荐(0)

算法学习(6):线段树

摘要: 线段树 介绍 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。 建立 void build(ll l = 1, ll r = n, ll p = 1) { if (l == r) // 到达叶子节点 tree[p] = A[l]; // 阅读全文

posted @ 2021-05-05 17:37 小星◎ 阅读(101) 评论(0) 推荐(0)

2021年4月30日

算法学习(5):ST表

摘要: ST表(Sparse Table,稀疏表)是一种简单的数据结构,主要用来解决RMQ(Range Maximum/Minimum Query,区间最大/最小值查询)问题。 //进行预处理,计算区间最大值 int f[MAXN][21]; // 第二维的大小根据数据范围决定,不小于log(MAXN) f 阅读全文

posted @ 2021-04-30 17:45 小星◎ 阅读(223) 评论(0) 推荐(0)

算法学习(4):gcd和exgcd

摘要: GCD inline int gcd(int a,int b) { return b == 0 ? a : gcd(b,a % b); } EXGCD 第一种 int exgcd(int a, int b, int &x, int &y) { if (b == 0) { x = 1; y = 0; 阅读全文

posted @ 2021-04-30 17:43 小星◎ 阅读(92) 评论(0) 推荐(0)

算法学习(3):快速幂

摘要: 快速幂 long long fpow(long long a,long ,long b,long long mod) { long long res = 1; while(b) { if(b & 1) res = (res * a) % mod; a = (a * a) % mod; b >>= 1 阅读全文

posted @ 2021-04-30 17:37 小星◎ 阅读(45) 评论(0) 推荐(0)

算法学习(2):树状数组

摘要: 树状数组(Binary Index Tree, BIT)。 最简单的树状数组支持两种操作,时间复杂度均为 : 单点修改:更改数组中一个元素的值 区间查询:查询一个区间内所有元素的和 #1.lowbit(x) lowbit(x) = ((x)&(-x)) 此操作为取x在二进制下的最后一位1(数字在计算 阅读全文

posted @ 2021-04-30 17:20 小星◎ 阅读(79) 评论(0) 推荐(0)

算法学习(1):并查集

摘要: 并查集 并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作: 合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。 初始化: fa[i]=i; Find: 无压缩 int Find(int x) { if(fa[x]= 阅读全文

posted @ 2021-04-30 17:17 小星◎ 阅读(56) 评论(0) 推荐(0)

导航