前言:线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整...
分类:
其他好文 时间:
2014-08-30 15:05:49
阅读次数:
249
树状数组的引入:
对于查询和修改要求差不多,使用树状数组可以达到logN的复杂度
红色矩形表示的数组C就是树状数组.这里,C[i]表示A[i-2^k+1]到A[i]的和,而k则是i在二进制时末尾0的个数,或者说是i用2的幂方和表示时的最小指数。
所谓的k,也是该节点在树中的高度.
修改第i个元素,为了维护数组C的意义,需要修改C[i]以及C[i]的全部祖先,而非C[i]的祖先的节点则对...
分类:
其他好文 时间:
2014-08-30 11:15:39
阅读次数:
224
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166题目意思:给出 N 个数你,通过对某些数进行更改(或者 + 或者 -),当输入的是 Query 的时候,需要计算出 某个区间的和。 树状数组第一题,算是模板吧 ^_^ 有个小细节,wa 了几次,.....
分类:
其他好文 时间:
2014-08-20 01:15:46
阅读次数:
212
敌兵布阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 44361 Accepted Submission(s): 18875
Problem Description
C国的死对头A国这段时间正在进行军事演...
分类:
其他好文 时间:
2014-08-19 14:33:34
阅读次数:
194
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166敌兵布阵Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submissi...
分类:
其他好文 时间:
2014-08-11 10:04:52
阅读次数:
316
单点更新是最最基础的线段树,只更新叶子节点,然后把信息用pushup这个函数更新上来。http://acm.hdu.edu.cn/showproblem.php?pid=1166update单点更新,query区域求和。#include #include #include #include #def...
分类:
其他好文 时间:
2014-08-10 12:47:40
阅读次数:
202
敌兵布阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 43607 Accepted Submission(s): 18499
Problem Description
C国的死对头A国这段时间正在进行军事演习,所以...
分类:
其他好文 时间:
2014-08-09 21:28:29
阅读次数:
259
Description
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。
中央情报局...
分类:
其他好文 时间:
2014-08-09 18:53:18
阅读次数:
322
Problem Description
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视...
分类:
其他好文 时间:
2014-08-09 18:49:38
阅读次数:
247
/*
水水的线段树点修改:
----------------------------------------------------------------
void build(int l,int r,int o)建树
{
int mid = (l + r) / 2;
a[o].left = l;
a[o].right = r;
a[o].num = 0;
...
分类:
其他好文 时间:
2014-08-08 21:24:56
阅读次数:
322