线段树用途: 用于区间修改与求和: 区间修改: 修改l到r之间的值 , 遍历线段树 , 若某个子节点l<=L && R<=r , 则在该节点上标记修改的值 , 访问该节点及他的子节点时再将标记下传; 线段树可持久化: 核心: 永远不修改节点上的值 , 只会新建节点 ; 实现: 每当修改值的时候 , ...
分类:
其他好文 时间:
2020-06-29 22:44:51
阅读次数:
106
数据结构 可持久化线段树 前言 欸?明明是想学可持久化$trie$的,突然被拐到了可持久化线段树? 可持久化线段树(主席树) 要学可持久化线段树,线段树肯定是学过了的吧 相比线段树,可持久化线段树的优势在于可以存储历史版本。详情参照这道题:【模板】可持久化数组(可持久化线段树/平衡树) 我们把题干化 ...
分类:
其他好文 时间:
2020-06-29 22:42:39
阅读次数:
50
题目连接 体验++ 我们首先从确定算法着手 \(n=1e6\) 根据常识,我们可以选择的有$O(nlogn) or O(n)$ 同样根据常识$O(nlogn)的玩意儿有二分,线段树等等$ $O(n)$的玩意儿有dp,贪心 $dp$我觉得起码要开二维才行,否则弄不出来的 那么就只剩下贪心和二分线段树之 ...
分类:
其他好文 时间:
2020-06-29 13:29:24
阅读次数:
74
#线段树区间乘法 ##题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上$x$ 将某区间每一个数加上$x$ 求出某区间每一个数的和 ###输入格式 第一行包含三个整数$n,m,p$,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含$n$个用空格分隔的整数,其中第$ ...
分类:
其他好文 时间:
2020-06-28 22:27:48
阅读次数:
78
Description 思路 看了cf的题解,没想到这么的简单巧妙,tql 如果一个棋子在(x, y),那么它到k列的最小纵坐标i = y + abs(x - k)。所以就可以统计第k列的每一行有将多少枚棋子。 假设有r×m的棋盘,设f(j)为第k列、第j行及以上(j<=r)将有多少枚棋子。那么棋盘 ...
分类:
其他好文 时间:
2020-06-28 20:45:51
阅读次数:
54
P3372 【模板】线段树 1 #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N=1e5+10; ll a[N]; struct Node{ ll it; ll l; ll r; ll data ...
分类:
其他好文 时间:
2020-06-28 20:19:34
阅读次数:
41
考虑把每一个区间单独统计,令$f[i]$表示第i个区间有标记的次数,$g[i]$表示第i个区间及其祖先中存在标记的次数,然后对于操作将所有区间分为5类(T为已执行操作个数): 1.被修改,那么$f[i]+=2^{T}$,$g[i]+=2^{T}$(定义修改为执行了$tag=1$) 2.被经过,$f[ ...
分类:
其他好文 时间:
2020-06-27 14:41:32
阅读次数:
46
##题面 题目链接 ##思路 朴素的想法我们回去暴力修改区间元素,从而判断教室能否够用,但是看数据范围显然这会超时,既然区间问题我们立马想到前缀和和差分数组,and线段树和树状数组,这里不写树状数组和线段树的做法。我们看数据测试量,然后看了一下,这个答案具有线性性质,所以我们可以二分加速,所以我们二 ...
分类:
编程语言 时间:
2020-06-26 10:45:01
阅读次数:
128
题意:https://www.luogu.com.cn/problem/P4556 树链加数,问你每个节点最多的是哪个数。 思路: 树链加数很容易想到差分。 从下往上用权值线段树合并即可,直接用pushup把答案存在树根即可,不用每次查询最多的数 1 struct EDGE 2 { 3 int to ...
分类:
其他好文 时间:
2020-06-25 17:45:26
阅读次数:
57
一道 树状数组套权值线段数的模板题。(然而我刚开始用线段树套平衡树做了) (orz hzwer) 题意 给定一个含有 n 个数的序列 \(a_1,a_2 \dots a_n\),需要支持两种操作: Q l r k 表示查询下标在区间$ [l,r]$中的第 k 小的数 C x y 表示将 \(a_x\ ...
分类:
其他好文 时间:
2020-06-25 15:20:20
阅读次数:
72