树套树 Orz zyf 我的树套树不知道为啥一直WA……只好copy了zyf的写法TAT 这题还可以用CDQ分治来做……但是蒟蒻不会……//y坐标的树状数组是按权值建的……所以需要离散化…… 1 /**********************************************...
分类:
其他好文 时间:
2015-03-17 11:45:33
阅读次数:
160
题意:有一个序列"1 a b k c" means adding c to each of Ai which satisfies a 2 3 #include 4 #include 5 #include 6 #include 7 const int MAXN=50020; 8 9 10 int...
分类:
编程语言 时间:
2015-03-17 10:15:16
阅读次数:
143
树套树 orz zyf 这题的思路……算是让我了解到了树套树的一种用途吧三维。。。第一维排序,第二维树状数组,第三维treap具体实现就是每个树状数组的节点保存一颗treap,然后就可以查询了。 好神啊…… 树套树可以方便的进行特殊的区间求和,大多数满足区间加法的运算都可以用树套树来搞,比如...
分类:
其他好文 时间:
2015-03-17 00:39:18
阅读次数:
152
树套树 Orz zyf神犇 时光倒流……逆序处理,将删点改为加点,动态维护序列。 由于是动态,要加点,所以用树状数组;同时又需要求序列中求比当前元素大/小的元素个数,所以要用平衡树。 所以方法就是在树状数组的每个节点上维护一棵这个节点表示的区间的平衡树。 为什么这样做是对的呢?因为求 12...
分类:
其他好文 时间:
2015-03-16 22:33:10
阅读次数:
223
第一次写树状数组,感觉那个lowbit位运算用的相当厉害。因为-x相当于把x的二进制位取反然后整体再加上1,所以最右边的一个1以及末尾的0,取反加一以后不变。比如1000取反是0111加一得到1000,这样与运算以后不变最右边的1左边部分取反,加一不会影响左半部分,所以与运算以后全部为0对于这道题来...
分类:
编程语言 时间:
2015-03-16 21:01:17
阅读次数:
487
**以下模板都是点更新,区间查询,如果是区间更新点查询,只需将利用lowbit的循环方向倒过来**
一维:inline int lowbit(int x)
{
return x & -x;
}void add(int x, int val)
{
for(int i = x; i <= n; i += lowbit(i)) C[i] += val;
}int sum(int x)
{...
分类:
编程语言 时间:
2015-03-15 23:04:33
阅读次数:
179
Description有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。Input第一行N,M接下来M行,每行形如1 a b c或2 a b cOutpu...
分类:
编程语言 时间:
2015-03-15 18:04:38
阅读次数:
178
对于求逆序数问题,学会去利用树状数组进行转换求解方式,是很必要的。一般来说我们求解逆序数,是在给定一串序列里,用循环的方式找到每一个数之前有多少个比它大的数,算法的时间复杂度为o(n2)。那么我们通过树状数组可以明显提高时间效率。我们可以按照排列的顺序依次将数字放入树状数组中,并依次更新预与之相关联...
分类:
编程语言 时间:
2015-03-15 00:41:29
阅读次数:
162
树状数组
关于树状数组的详细介绍可见刘汝佳《算法竞赛入门经典:训练指南》
对于一个n元素的数组A[n],可执行如下操作:
Add(I, d):让A[i]变成A[i]+d。
Query(L, R):返回A[L]+A[L+1]+…+A[R]。
注意:树状数组只能计算A[1]开始的和,A[0]这个元素是不能用的。上面操作复杂度都是...
分类:
编程语言 时间:
2015-03-14 21:44:37
阅读次数:
206
DescriptionYou are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to...
分类:
编程语言 时间:
2015-03-14 21:43:18
阅读次数:
1724