随笔分类 -  数据结构

摘要:```c #include using namespace std; const int N = 100005; int rt, tot, fa[N], ch[N][2], val[N], cnt[N], sz[N]; void maintain(int x) { sz[x] = sz[ch[x][0]] + sz[ch[x][1]] + cnt[x]; } bool get(int x) { r 阅读全文
posted @ 2020-04-24 08:09 Suiyue_Li 阅读(179) 评论(0) 推荐(0)
摘要:吉司机线段树 引入: 训练赛遇到一个题 "打铁的匠" ,需要做到询问区间大于x的和。 赛后学习到,需要用到吉司机树的技巧。 引入的原因十分显然: 经典问题:给定一个序列,支持区间赋值 $min/max(a[i],x)$ 以及区间求和。 每次修改的时间复杂度为$log$或$log^2$。 算法构造: 阅读全文
posted @ 2020-04-22 18:25 Suiyue_Li 阅读(549) 评论(0) 推荐(0)
摘要:数据结构大师 时间限制: 1 Sec 内存限制: 128 MB 题目描述 小$Z$是个数据结构高手,这天他得到了一个由左括号和右括号组成的字符串。随之而来的是 $m$ 次询问,对于第 $i$ 次询问,小Z需要回答出这个字符串的第$l_i$ 到$r_i$ 个字符组成的字串中最长的合法括号子序列的长度。 阅读全文
posted @ 2020-04-09 10:18 Suiyue_Li 阅读(413) 评论(0) 推荐(0)
摘要:引入: 在 $RMQ$ 问题(区间最值)中,有一个著名的 $ST$ 算法。原理是通过倍增实现。给定一个长度 $N$ 的数列,$ST$ 算法在经过 $O(NogN)$ 的预处理后,能够以 $O(1)$ 的复杂度在线查询下标 $l\to r$ 之间的数的最值。 原理: 设 $F[i,j]$ 表示数列 $ 阅读全文
posted @ 2020-03-28 18:16 Suiyue_Li 阅读(229) 评论(0) 推荐(0)
摘要://#pragma GCC optimize(4) #include <bits/stdc++.h> typedef long long ll; using namespace std; const int N=100000+5; #define ls (p<<1) #define rs (p<<1 阅读全文
posted @ 2019-09-02 16:55 Suiyue_Li 阅读(139) 评论(0) 推荐(0)
摘要:#define ls p<<1 #define rs p<<1|1 struct Seg { int p,l,r; ll sum,tag,mx; #define l(i) t[i].l #define r(i) t[i].r #define mx(i) t[i].mx #define tag(i) 阅读全文
posted @ 2019-08-19 21:13 Suiyue_Li 阅读(198) 评论(0) 推荐(0)