随笔分类 - 板子 / 数据结构模板
发表于 2024-03-23 20:43阅读:6评论:0推荐:0
摘要:动态维护第k大 priority_queue<int> a; //大根堆 priority_queue<int,vector<int>,greater<int> > b; for(int i=1; i<=n; i++){ int x; scanf("%d",&x); if(b.empty()||x>
阅读全文 »
发表于 2024-03-20 22:30阅读:86评论:0推荐:0
摘要:1.单点加 2.前缀和查询 int n, m; int a[N]; int tr[N]; int lowbit(int x){ return x&(-x); } void add(int pos,int k){ for(int i=pos;i<=n;i+=lowbit(i))tr[i]+=k; }
阅读全文 »
发表于 2024-03-02 16:56阅读:10评论:0推荐:0
摘要:以一道区间和查询来说明板子如何使用 1.merge的时候只需要维护两个根节点的距离,利用的是合并时题目给的信息 2.find的时候更新维护是子节点到根的距离 3.需要加一个查询函数,因为距离数组是开在结构体内部的。 题目描述 对于一个长度为 的整数数列 \(A_{1}, A_{2}, \
阅读全文 »
发表于 2023-12-10 03:16阅读:6评论:0推荐:0
摘要:已知一棵包含 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将树从 到 结点最短路径上所有节点的值都加上 。 2 x y,表示求树从 到 结点最短路径上所有节点的值之和。 3 x z,表
阅读全文 »
发表于 2023-12-10 02:15阅读:6评论:0推荐:0
发表于 2023-12-10 01:54阅读:12评论:0推荐:0
摘要:最大异或和 给定一个非负整数序列 ,初始长度为 。 有 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 ,序列的长度 加 。 Q l r x:询问操作,你需要找到一个位置 ,满足 \(l \l
阅读全文 »
发表于 2023-12-09 22:51阅读:9评论:0推荐:0
摘要:给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。每个数字不超过1e9。 int n, m; int a[N]; int tr[N]; vector<int>lan; int lowbit(int x){ return x&(-x); } void discrete() { sort(l
阅读全文 »
发表于 2023-12-09 16:58阅读:10评论:0推荐:0
摘要:维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 ; Q x 询问一个字符串在集合中出现了多少次。 所有输入的字符串总长度不超过 ( 也就是节点数) const int N=100010; int n; char s[N]; int ch[N][26],c
阅读全文 »
发表于 2023-12-03 21:01阅读:22评论:0推荐:0
摘要:struct DSU { vector<int> f, siz; DSU() {} DSU(int n) { init(n); } void init(int n) { f.resize(n); std::iota(f.begin(), f.end(), 0); siz.assign(n, 1);
阅读全文 »
发表于 2023-11-12 21:10阅读:19评论:0推荐:0
摘要:离散化是一种数据处理的技巧,本质上可以看成是一种 哈希,其保证数据在哈希以后仍然保持原来的全/偏序关系。 https://oi-wiki.org/misc/discrete/ 通俗地讲就是当有些数据因为本身很大或者类型不支持,自身无法作为数组的下标来方便地处理,而影响最终结果的只有元素之间的相对大小
阅读全文 »
发表于 2023-11-07 17:44阅读:13评论:0推荐:0
摘要:封装函数版本 template <typename T, class F = function<T(const T&, const T&)>> struct SparseTable { int n; vector<vector<T>> st; F func; SparseTable(const ve
阅读全文 »