哦上帝啊,如果我有罪,请叫法律来制裁我,而不是写了个线段树调好几天,这篇复健鸽了两三天了(谢罪)因为最近在和学长聊天orz(我是什么臭鱼烂虾我这就爬) 个人觉得线段树的思想比树状数组要简单些,但是代码量确实是树状数组更优美orz 树状数组是从最基础元素开始标为1,用二进制整数下标存前缀和,但是线段树 ...
分类:
其他好文 时间:
2020-11-18 13:00:22
阅读次数:
8
1. HDU1166 敌兵布阵 题目链接 题意:单点更新+区间查询(求和)。 树状数组 (218ms) #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> usi ...
分类:
其他好文 时间:
2020-11-01 21:18:27
阅读次数:
19
LIS 的 O(n log n) 解法 LIS 也就是 f[i] 表示以 i 为结尾的最优答案, 原数列为 a。 首先可以直接用树状数组优化一下转移的复杂度, 这个方法比较naive就不说了。 另一种方法的话, 是维护一个 g 数组, 用 g[i] 记录 f 值为 i 的最小 a 值, 易证 g[1 ...
分类:
其他好文 时间:
2020-11-01 10:37:04
阅读次数:
25
Link P4168 [Violet]蒲公英 Solve 本题是非常经典的在线求区间众数问题。因为众数不具有区间可加性(已知$[x,y]\(和\)[y+1,z]\(的众数,不能直接得到\)[x,z]$的众数),所以用树状数组或者线段树维护就特别难,我们考虑分块来做。 我们把序列分成$T$块,每块长度 ...
分类:
其他好文 时间:
2020-11-01 09:29:32
阅读次数:
16
什么是树状数组? ? 树状数组就是通过数组来模拟一种树形结构,这种树形结构能够维护区间信息。同样类似的数据结构还有线段树,线段树与树状数组相比,它的结点更多,也就是说线段树的常数更大。 ? 线段树是通过把区间二分来维护区间的信息,而树状数组是通过lowbit来维护区间的信息。 ? 以树状数组维护区间 ...
分类:
编程语言 时间:
2020-10-22 22:18:30
阅读次数:
25
本来以为有多难,结果发现是道树状数组水题... 显然,对于每一个添加的不等式,有3种情况: \(a<0\) 。此时可转换为 $x < {{a} \over } $ 。 但是,我们发现 \({a} \over {c-b}\) 这货是实数,容易产生误差,不好处理。 但我们又发现,询问的 \(k\) 一定 ...
分类:
其他好文 时间:
2020-10-13 17:40:31
阅读次数:
25
#include <string.h> #include <stdio.h> #include #include using namespace std; int n,m,a[11000],c[11000]; //差分建树,区间更新 int lowbit(int x) { return x&-x; ...
分类:
编程语言 时间:
2020-10-06 20:10:09
阅读次数:
25
题意: 链接:https://ac.nowcoder.com/acm/contest/5158/I 思路:树状数组主要针对的是区间(而且是一条线段的)求和问题,所以需要利用dfs序和数组 in [ ], out [ ] (前缀和原理),利用dfs进行搜索,每个点依次被访问的顺序就是每个点的dfs序, ...
分类:
编程语言 时间:
2020-10-05 21:24:06
阅读次数:
36
树状数组小结 背景 树状数组本质是区间前缀和,但是众所周知,暴力和前缀和各有优缺点…… (图片中本来是线段树的,但是其实差不多吧) 所以诞生了树状数组这个东西。 树状数组分为以下几步 声明部分 #include <iostream> #include <algorithm> #include <cs ...
分类:
编程语言 时间:
2020-09-21 11:52:34
阅读次数:
54
importjava.util.Scanner;/***k为尾部的0的个数*C[i]=A[i-2^k+1]+A[i-2^k+2]+...+A[i]*/publicclassTreeArray{privateintsize;privateintarr[];privateintc[];publicTreeArray(intsize){this.size=size;this.arr=newint[siz
分类:
编程语言 时间:
2020-09-18 03:56:02
阅读次数:
37