题目描述: 分析:虽然是求区间和,但数组是不可变的,不可变 意思是 不涉及线段树更新操作。因此可以不使用线段树这种复杂的数据结构,对于该题不使用线段树效果更好,初始化是O(n)的复杂度,以后每次调用只需要O(1)的复杂度。 // 不使用线段树的解决方案 class NumArray { privat ...
分类:
编程语言 时间:
2020-05-07 00:46:03
阅读次数:
63
板子题.jpg 不同颜色互不影响,所以判断每种颜色有没有奇环就可以了,顺便判一下联不联通.jpg ...
分类:
其他好文 时间:
2020-05-06 21:27:00
阅读次数:
87
前言 由于这篇题解思路并没有什么区别,所以这篇题解的意义在于稍稍更细致地讲下思路和卡常方法。~~估计也只有我常数这么大了~~ 思路 第一感 由于题目要查询到一个点距离为$k$以内的所有点的权值和,一个显然的想法就是对每个点开一个线段树维护权值和,下标维护距离,然后暴力查询。显然这是$MLE+TLE$ ...
分类:
其他好文 时间:
2020-05-06 20:09:16
阅读次数:
75
树状数组简单来看就是一个维护前缀和的数据结构,它相当于线段树去掉了所有的右子树,需要查询时,通过信息拼接来达到查询目的,基础应用为 **(单点更新,区间查询)** **(区间更新,单点查值)** (多了个差分) **(区间修改,区间查询)** (通过数学推导得出我们需要维护两个树状数组) 具体内容参 ...
分类:
编程语言 时间:
2020-05-05 23:35:57
阅读次数:
76
LINK: "Security" 求一个严格大于T的字符串 是原字符串S[L,R]的子串。 容易想到尽可能和T相同 然后再补一个尽可能小的字符即可。 出于这种思想 可以在SAM上先跑匹配 然后枚举加哪个字符 判定即可。 判定s是否在[L,R]中出现过 最快的方法 就是right集了。 这个可以线段树 ...
分类:
其他好文 时间:
2020-05-05 20:11:36
阅读次数:
61
"SCOI 2016 萌萌哒" solution 有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器——ST表 我们可以将一个点拆成$logN$个点,分别代表从点$i$开始,长度为$2^k$的子串 那么当我们处理两个区间相等的关系时,对区间做二进制拆分,拆成$log$个区 ...
分类:
其他好文 时间:
2020-05-04 19:04:50
阅读次数:
50
题目 https://www.luogu.com.cn/problem/P3374 代码 树状数组版: #include<iostream> #include<cstdio> using namespace std; long long a[500001], c[500001]; int n, m; ...
分类:
其他好文 时间:
2020-05-04 17:03:40
阅读次数:
49
/* 离线读入所有值后离散化 题意要求的是,sum{ ai*2^(i-1)*aj*2^(n-j) } 分析这个式子,考虑进行分治 区间[l,r]的 sum{ ai*2^(i-l)*aj*2^(r-j) } 可以将式子分成 ai*2^(i-l) 和 aj*2^(r-j)两部分看, 线段树维护四个值,s ...
分类:
其他好文 时间:
2020-05-03 18:47:51
阅读次数:
60
题目 https://www.luogu.com.cn/problem/P3373 思路 参考:https://www.luogu.com.cn/blog/milkfilling/solution-p3373 ①加法优先,即规定好segtree[root*2].value=((segtree[roo ...
分类:
其他好文 时间:
2020-05-03 16:28:26
阅读次数:
44
题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 kk。 求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。 接下来 m ...
分类:
其他好文 时间:
2020-05-03 11:03:38
阅读次数:
52