面试准备 - C# 版本的树状数组
树状数组 计算 任意连续N个值的和的时间复杂度为Log(n) 修改也是Log(n)
而普通数组修改是O(1) 计算和是O(n)
具体定义可以看这里:http://zh.wikipedia.org/zh-cn/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84
或者看这个Blog:http://dongxicheng.org/structure/binary_indexed_tree/
这东西刚刚好可以解决 编程之美里面的 1.7光影切割问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Clover.Algoritms.DataStructure
{
public class TreeArray
{
private double[] items; private double[] data;
public TreeArray(double[] data)
{
if (data == null || data.Length == )
throw new ArgumentNullException("data"); this.items = new double[data.Length];
this.data = data; for (int i = ; i <= items.Length; i++)
{
int start = i - Lowbit(i);
double sum = ;
while (start < i)
{
sum += data[start];
start++;
}
items[i - ] = sum;
}
}
public double Sum(int k)
{
double ret = ;
while (k > )
{
ret += items[k - ];
k -= Lowbit(k);
}
return ret;
}
public void Update(int k, int value)
{
int x = k - ;
var oldValue = this.data[x];
this.data[x] = value; for (int i = x; i < items.Length; i += Lowbit(i + ))
{ items[i] = items[i] - oldValue + value;
}
} public static int Lowbit(int i)
{
return i & -i;
}
}
}
面试准备 - C# 版本的树状数组的更多相关文章
- hdu3015树状数组 poj1990的离散化版本
		都是一类题目,推导调试比较烦,想出来还是不难的 /* 给定n个点对,按一维升序排序一次,每个点的序号为Di,按二维升序排序一次,每个点的序号为Hi 求sum{w(i,j)} w(i,j)=abs(Di ... 
- NOIP2013 提高组day2 2 花匠 动规 找拐点 树状数组
		花匠 描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体 ... 
- HDU4836 The Query on the Tree(树状数组&&LCA)
		由于智力的问题,百度之星完全lu不动..开场看第一题根据题目给的条件我觉得一定是可以构造出来的,题目给的意思颇有鸽巢原理的感觉,于是觉得开场第一题应该就是智力构造题了,想了半个小时,发现完全想不动,于 ... 
- 【树状数组】  poj 2352
		题意:给出n个平面二维坐标,对于每个坐标,如果这个坐标跟(0,0)形成的矩形内包含的点数为 k (包含边界,但不包含坐标本身),那么这个坐标就是 level k.输出level 0 - n-1的点数分 ... 
- hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
		点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ... 
- HDU 3333 Turing Tree(树状数组/主席树)
		题意 给定一个长度为 \(n\) 的序列,\(m\) 个查询,每次查询区间 \([L,R]\) 范围内不同元素的和. \(1\leq T \leq 10\) \(1 \leq n\leq 300 ... 
- BZOJ 2738 子矩阵第k大 | 二维树状数组 整体二分 分治
		BZOJ 2738 "矩阵乘法"(子矩阵第k大) 题意 给出一个矩阵,多次询问子矩阵中第k大的数是多少. 题解 我做这道题之前先照着这道题出了一道题,是这道题的一维版本,在这里:h ... 
- bzoj 3730 震波——动态点分治+树状数组
		题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3730 查询一个点可以转化为查询点分树上自己到根的路径上每个点对应范围答案.可用树状数组 f ... 
- [bzoj4009] [HNOI2015]接水果 整体二分+扫描线+dfs序+树状数组
		Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更 加 ... 
随机推荐
- PL/SQL通过存储过程为相同数据添加序号
			在Oracle数据库中存有一串数据(Ori_Seq),数据包含不等量重复: 为方便查看与管理,现希望添加一字段(New_Seq),在原有数据的末尾为其添加一串序号,相同数据序号从小到大排列,序号长度为 ... 
- Bookstore project using XAMPP 详细配置 Part 1
			这是学校的一个project,记录在这里,以备复习.主要是用XAMPP通过phpMyAdmin连接MySQL数据库,实现一个简单的查询功能. Outline Setup of XAMPP Implem ... 
- DateTime与DateTime?赋值问题以及null类型的如何赋值问题
			解决方案: //主要用到向下兼容原理,DateTime?继承于DateTime: string req = "为字符串的参数"; DateTime? dt = null; Date ... 
- kali基本设置
			一.更换比较快的软件源 修改sources.list文件(su): leafpad /etc/apt/sources.list #debain源 deb http://mirrors.163.com/ ... 
- myrocks记录格式分析
			概况 rocksdb作为KV存储引擎,那么myrocks记录最终会以kv的形式存储在rocksdb中.MySQL中的表一般由若干索引组成, 在innodb存储引擎中,每个索引对应一颗B树,而在rock ... 
- Java设计模式1:设计模式概论
			设计模式是什么 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.毫无 ... 
- 人人都是 DBA(IV)SQL Server 内存管理
			SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理 ... 
- 【读书笔记】-- JavaScript数组
			数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ... 
- 开源中国(oschina)的Git托管
			一些废话 对于使用CVS/SVN出身的人来说,Git始终有点难上手(比如我),因为概念较多,一时理不清,尽管网上已经有很多教程,其实后来我发现,要掌握它的办法就是使用它,着手开始用它做源码管理,有问题 ... 
- 安装金山WPS2013造成的HTML5 file.type值异常
			处理代码的兼容性是前端攻城师们的家常便饭了,一般是对各种浏览器进行兼容性处理.但是有时候我们也会遭遇到浏览器以外的影响因素,这个是经常会被忽视掉的内容.比如前几天就听说客户端安装迅雷.暴风影音等软件会 ... 
