树状数组

BYvoid神犇曾经说过。

树状数组是一个优美小巧的数据结构

它没有像其他数据结构那样复杂,在很多时候可以代替线段树,它仅通过简单的几个函数,不需要任何其他的空间,就成功的把求前序和的时间复杂度降到了$O(\log_2 n)$,当然代价就是插入的时间复杂度也变成了$O(\log_2 n)$,不过为了能够快速的求前序和,这是在所难免的。 在树状数组中,一个元素所代表并不只有自己,比如a[15],因为15的二进制是00001111,所以这个a[00001111] = a[00001110] + a[00001100] + a[00001000]; 即a[15] = a[14] + a[12] + a[8];

Noip初赛结束

按道理来说这个这个不应该写出来,毕竟初赛那么简单,但是我还是做一下总结,因为我在初赛中还是发现了一些自己依然不了解的知识点。成绩自己预计有66分左右,这让我无限感叹:还是湖南好,不像浙江省90+的初赛线,还让不让人活了。看来湖南除了高考分数线高以外还是有一点优点的。

选择题不是很难,但是有几个比较坑的地方,比如像是链表储存那道题

线性表若采用链表储存结构,要求内存中可用储存单元地址。

A.必须连续。B.部分地址必须连续。C.一定不连续。D.连续不连续均可。

二分查找

本以为自己会写二分查找,不过就是取中间值和要找的对象进行比较大小,再根据比较的结果,选择左边还是右边。最终找到要找的东西。但是正如Jon Bentley所说

90%以上的程序员无法正确无误的写出二分查找代码。 ——Jon Bentley