主席树(可持久化线段树) 前置芝士 知识点 线段树,权值线段树(不一样),离散化,前缀和(思想) 由来 据说,是一位叫fotile主席的大大在写一道题时因为不会划分树就临时yy出一个算法,于是,这算法就这么诞生了。 作用 对区间求 \(kth\) 思想 思考优化策略 一列数,可以对于每个点i都建一棵 ...
分类:
其他好文 时间:
2020-07-19 17:57:51
阅读次数:
52
树状数组 部分转自Xenny 前置芝士 什么是树状数组 用数组来模拟树形结构 可解决问题 解决大部分基于区间上的更新以及求和问题 和线段树的区别 树状数组可以解决的问题都可以用线段树解决,但是树状数组码量小,系数少(很多) 优点和缺点 修改和查询的复杂度都是O(logN),而且相比线段树系数要少很多 ...
分类:
编程语言 时间:
2020-07-19 17:57:33
阅读次数:
66
题目描述 Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is offering you a discount. You are given an array a a a of ...
分类:
其他好文 时间:
2020-07-19 17:51:34
阅读次数:
56
权值线段树 前置芝士 ? 顾名思义,权值线段树也算是一种线段树,它的本质也是线段树。所以在学习权值线段树之前,如果对普通线段树的掌握不太熟,可以先去这里去搜索线段树进行学习。 ? 而权值线段树的进一步本质则是用线段树维护桶。同理,如果不知道桶是什么可以到这里进行搜索。 概念 ? 我们知道,普通线段树 ...
分类:
其他好文 时间:
2020-07-19 16:32:24
阅读次数:
61
线段树合并 前置芝士 动态开点线段树和权值线段树 乍一看,线段树合并和上面那两个奇怪的东西有什么关系。 其实,线段树合并的全称为动态开点权值线段树合并( 雾 如果对上面那两个奇怪的东西不理解可点开链接进行搜索(大雾 优点 ? 动态开点线段树有着一些优点,比如说当你让某个节点继承另一个节点的左儿子或者 ...
分类:
其他好文 时间:
2020-07-19 16:32:06
阅读次数:
90
#树状数组 又名二叉索引树,是一种与线段树相似的数据结构 他们能使对一个区间的数修改以及查询的速度提升许多 ##树状数组模板1 #include<iostream> #include<cstdio> using namespace std; int tree[2333333]; int sum[23 ...
分类:
其他好文 时间:
2020-07-19 16:06:22
阅读次数:
52
可以发现合法的答案有两种可能: 1.询问的$x$即为最大值(或之一),那么只需要找到x前两个数并判断即可 2.询问的$x$不是最大值,那么就要保证另外两边之差小于$x$,维护后缀中$的前驱k-k的前驱$最小的数即可,可以使用线段树 然而这道题还有很多的细节: 1.这里的前驱可以与k相等(因为$x,k ...
分类:
移动开发 时间:
2020-07-18 11:38:51
阅读次数:
101
线段树是学不明白了…… 部分指针用法 对于这段代码, struct Node{ int a, b, c; }YJH[100], x; Node *p = YJH, *q = &x; 以下代码在使用过程中是等价的: cout << x.a << endl; cout << q->a << endl; ...
分类:
其他好文 时间:
2020-07-18 00:55:56
阅读次数:
106
首先先让我们认识离散化用的函数,STL给我们提供了便利: unique(start,end);//取出有序序列重复元素,左闭右开,返回去重复序列最后一个元素位置 lower_bound(start,end,key);//左闭右开中寻找第一个大等于key的数,返回值 std::sort(a+1,a+n ...
分类:
其他好文 时间:
2020-07-17 22:24:59
阅读次数:
82
昨天突然脑袋比较清醒,好像似乎以前没有搞太懂的可持久化线段树一下子就搞懂了,结果打了几遍还是出现了一些意想不到的问题,下面我就来整理一下,防止以后重蹈覆辙! 下面我放一个50分的代码: #include<bits/stdc++.h> #define LL long long using namesp ...
分类:
其他好文 时间:
2020-07-17 13:57:31
阅读次数:
57