06 2016 档案

摘要:分块 瞎搞个玩意支持对一个数组区间求和,单点修改。 啊,已经有很多方法了? 朴素算法:O(1)修改,O(n)查询 前缀和:O(n)修改,O(1)查询 树状数组:O(logn)修改,O(logn)查询 看似好像齐全了……然而还是有个比朴素好的东西:分块 我们把整个数组分成sqrt(n)个部分,每个部分 阅读全文
posted @ 2016-06-18 21:57 Krew 阅读(163) 评论(0) 推荐(0)
摘要:字典树 在存储字符串集合时,朴素的存储不仅空间开销大,而且不便于查找。在字典树中,我们把所有字符串汇集成一棵树,用公共前缀的方法节省空间。 操作: (1)插入:不断沿结点遍历,如无结点,则创立新节点。 (2)查找:同理,一直遍历即可。 代码(以HDU 1671为例): 左儿子右兄弟表示法: 有时候t 阅读全文
posted @ 2016-06-15 22:59 Krew 阅读(162) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18692 题目大意: 写一个支持查询集合元素个数和元素和的并查集,同时支持合并操作,把一个元素从一个集合拿到另一个集合的操作。 分析: 大意就是要写一个支持删除操作的并 阅读全文
posted @ 2016-06-12 23:40 Krew 阅读(177) 评论(0) 推荐(0)
摘要:正常的线段树 zkw线段树的区间修改实在是不明白…… 差分和前缀和的前缀和是什么gui…… 还是用正常的写了一发(数据大一定要用输入输出优化,大概能节省1/4的时间) 代码: include include include include define rep(i,x,y) for (int i=x 阅读全文
posted @ 2016-06-08 12:20 Krew 阅读(136) 评论(0) 推荐(0)
摘要:zkw线段树 传统线段树是基于递归的分治算法,常数太大,书写复杂度高。因此,清华大学的zkw提出了一种新的基于二进制运算的非递归线段树——zkw线段树。 操作: (1)区间查询: 我们让叶节点全部固定在最后一层,由于 查询是连续的 ,每一层至多访问两个节点,以最左边的节点为例,如果它是父亲的右儿子, 阅读全文
posted @ 2016-06-07 15:01 Krew 阅读(420) 评论(0) 推荐(0)
摘要:哈希表: 哈希表(hash table)是一种高效的判重算法,一般用于元素范围大但数量不多的情况,还可用于快速查找等部分,而且空间开销也不大。说明白了,就是把定义域内的整数映射到一个我们选定的范围内。 分析: 写一个哈希表,首先你要确定一个映射函数——哈希函数h(x),哈希函数的优劣将直接决定你的哈 阅读全文
posted @ 2016-06-04 23:32 Krew 阅读(159) 评论(0) 推荐(0)
摘要:RMQ问题: 区间最小值问题(Range Mininum Query,RMQ)指的是这样一类问题:给出长度为n的序列,支持一个查询操作:Query(x,y),表示询问区间[x,y]的最小值。 暴力查询需要O(n)的时间,效率太低了,线段树也需要O(logn)的时间,Tarjan他老人家又出来了,提出 阅读全文
posted @ 2016-06-02 19:13 Krew 阅读(173) 评论(0) 推荐(0)