什么是树状数组? ? 树状数组就是通过数组来模拟一种树形结构,这种树形结构能够维护区间信息。同样类似的数据结构还有线段树,线段树与树状数组相比,它的结点更多,也就是说线段树的常数更大。 ? 线段树是通过把区间二分来维护区间的信息,而树状数组是通过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
题目链接:https://vjudge.net/problem/POJ-2182 题意:n头牛,身高为1到n的一个排列。已知每头牛前面比它矮的个数,求每头牛的身高 这题和习题里的poj2828基本一样。倒着考虑,如果最后一头牛前面有k1个比它矮,那么它的身高就是k1+1。倒数第二头如果有k2个比它矮 ...
分类:
其他好文 时间:
2020-09-17 23:12:01
阅读次数:
30
题目链接:#6277. 数列分块入门 1 题目大意 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,单点查值。 solution 我们可以用树状数组和线段树来过掉他, 但是这是一道分块的题,那我们就要用分块来 \(A\) 掉它 查询操作: 我们可以直接记录一下块的操作, ...
分类:
其他好文 时间:
2020-09-17 20:04:26
阅读次数:
37
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 2000010; typedef long long LL; int n; //t[i]表示树状数组i结点覆盖的范围 ...
分类:
编程语言 时间:
2020-09-11 14:22:54
阅读次数:
34
给定长度为 $n$ 的数列,每个数都在 $[1,n]$ 间,回答 $m$ 个询问,每次给定一个区间 $[l,r]$,问其中有多少对数间存在倍数关系。 ...
分类:
编程语言 时间:
2020-09-11 14:19:51
阅读次数:
42