树状数组使用总结 在考试中 因为不清楚二维树状数组怎么用 而失手了无数遍了... 今天终于把这个坑填了 .... =_= 1.区间修改+单点查询(一维) 把查询第$x$个位置的值$s_x$变为查询前缀和$s_x = \sum_{i = 1}^x d(i)$。 其中 $d(x) = s_x s_{x ...
分类:
编程语言 时间:
2018-02-22 19:29:03
阅读次数:
175
二维树状数组模板(区间修改+区间查询) 例题: "JOIOI上帝造题的七分钟" 一共两种操作: $L\ x_1\ y_1\ x_2\ y_2\ d$:把$(x_1,y_1)$,$(x_2,y_2)$这个矩形内所有元素加$d$。 $k\ x_1\ y_1\ x_2\ y_2$:查询$(x_1,y_1) ...
分类:
编程语言 时间:
2018-02-22 19:23:48
阅读次数:
199
凸包好题 我一开始想的是线段树或平衡树维护最大前缀和,但是区间修改很恶心,后来想分块,发现貌似可以做,修改的话,中间的块打标记,两边的暴力重构,查询的话就是整块二分斜率为零的地方,边上的暴力查询。$O(nsqrt(n)log(n))$ 1 #include <cstdio> 2 #include < ...
分类:
其他好文 时间:
2018-02-22 14:24:39
阅读次数:
124
1.差分 设有一个数组a[]; 它的差分数组为c[] c[i]=a[i]-a[i-1]; 当区间修改时,下标x到y的值加上k,只需维护差分数组即可 c[x]=a[x]-a[x-1],所以c[x]+=k; c[y+1]=a[y+1]-a[y],所以c[y+1]-=k; 设b数组为c数组的前缀和数组 则 ...
分类:
其他好文 时间:
2018-02-21 21:40:37
阅读次数:
191
题解: 解法1: 树链剖分一下,对每条链建立一颗Splay 以宗教为第一关键字,深度为第二关键字建立 查询相当于Splay的一个区间 修改相当于删除一个节点,加入一个节点 O(nlog^2n) O(n); 解法2: 树链剖分一下,对每条链建立maxc棵权值线段树,动态开点 O(nlog^2n) O( ...
分类:
其他好文 时间:
2018-02-20 18:22:46
阅读次数:
171
https://www.luogu.org/problemnew/show/P3374 单点修改, 区间查询 https://www.luogu.org/problemnew/show/P3368 区间修改, 单点查询 ...
分类:
编程语言 时间:
2018-02-18 21:56:24
阅读次数:
224
直接上图,这就是线段树,可以看到,除了叶子节点,其余的都是区间,这不难想到线段树的用法:点修改和区间修改及询问。 我们可以从上往下建树,也可以反过来。 先说说怎么建树,我们不妨以从上往下来做,当我们想要修改[l,r]区间时,我们首先得修改[l,m]和[m+1,r]那么,我们不难发现这是一种递归。 所 ...
分类:
其他好文 时间:
2018-02-18 10:27:12
阅读次数:
142
思路: 二维树状数组。点修改区间查询转化为区间修改点查询。 http://blog.csdn.net/z309241990/article/details/9615259 http://blog.csdn.net/acm_BaiHuzi/article/details/46819049 实现: ...
分类:
其他好文 时间:
2018-02-16 18:40:30
阅读次数:
192
题目:http://poj.org/problem?id=3468 增加一个更改量数组,施以差值用法则区间修改变为单位置修改; 利用公式可通过树状数组维护两个数组:f与g而直接求出区间和。 代码如下: ...
分类:
编程语言 时间:
2018-02-11 00:12:03
阅读次数:
258
线段树 O(log(n))个区间覆盖L~R信息每层最多选两个区间 区间最大值 int n;int a[];int mx[];// 当前节点编号,当前表示的区间范围void build(int o,int l,int r){ if(l==r){ mx[o] = a[l]; }else{ int mid ...
分类:
其他好文 时间:
2018-02-10 19:27:50
阅读次数:
155