优秀的算法往往取决于你采用哪种数据结构,除了常规数据结构,日常更多也会遇到高级的数据结构,实现要比那些常用的数据结构要复杂得多,这些高级的数据结构能够让你在处理一些复杂问题的过程中多拥有一把利器。同时,掌握好它们的性质以及所适用的场合,在分析问题的时候回归本质,很多题目都能迎刃而解了。 这篇文章将重 ...
分类:
编程语言 时间:
2019-07-05 19:35:44
阅读次数:
139
Problem DescriptionThere are a bunch of stones on the beach; Stone color is white or black. Little Sheep has a magic brush, she can change the color o...
分类:
其他好文 时间:
2014-08-20 12:11:22
阅读次数:
209
本题是最基本的分段树操作了。或者一般叫线段树,不过好像和线段没什么关系,只是分段了。
不使用lazy标志,更新只是更新单点。
如果不使用分段树,那么更新时间效率只需要O(1),使用分段树更新效率就需要O(lgn)了。
但是不是用分段树,那么查询的时间效率是O(n),而分段树查询效率是O(lgn)
这就是amortize分摊了时间,而且lgn真的很快,数据不是非常巨大的时候,接近常数了。
故...
分类:
其他好文 时间:
2014-06-20 12:41:05
阅读次数:
206
给出一段数据,然后要更新单个数据,会询问一段数据中的最大值。
又是一道分段树操作。渐渐熟手了。
#pragma once
#include
#include
using namespace std;
class IHateIt_1754_1
{
static const int SIZE = 200001;
int *segTree; //不要使用segTree[SIZE<<2]...
分类:
其他好文 时间:
2014-06-08 15:40:21
阅读次数:
208
简单点说其实Segment Tree就是二分法的灵活运用。
需要的基础知识:
1 二分法
2 二叉树
3 最好熟悉堆排序
操作就是二分法和堆排序巧妙地合并起来。
有了这些基础知识Segment Tree就没有任何难度了。
参考原文:
http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/
...
分类:
其他好文 时间:
2014-05-15 13:33:33
阅读次数:
250