2018年8月22日训练日记

Treap(O(logn)):Treap主要是实现名次树、平衡树。名次树支持两个操作:找出第k小的元素(元素从小到大排序的第k个)、找到值x的名次。离线求区间第k大数(区间不能有包含)以及一些变形的区间第k大。(由于模板几乎都是指针的,就没写代码)

SplayTree(O(logn)):Splay这颗二叉树的中序遍历就是原序列。代码目前掌握不熟练,有待练习提高。例题:

区间更新区间求和。

维护最大连续和。

插入删除(一段)节点,区间翻转。

寻找x的排名、寻找排名为k的节点。

寻找x的前驱和后继。

区间翻转插入到头部、尾部。

区间循环移位,插入删除,加,求最小值,区间翻转。

六种操作。

循环队列的七种操作。

BFS(34篇已看完):1、 设计(有效)状态:当前状态、后继状态、相同状态去重(记忆化)。2、记录同类状态最优值(比如最小时间)。3、状态剪枝。去除重复状态,用数组、状压或者hash(保存所有已出现的非重复状态)。4、查找目标状态,找到直接退出(当前状态已经是最优)。通常麻烦的就是寻找下一个状态并且判断是否为有效状态。(发现有时候记录路径用数组模拟队列更直观一些)

BFS(24篇已看完):和bfs类似。但是针对具体题目而言最重要的还是学会剪枝(做过很多题目之后,多多少少掌握一些技巧了),避免重复计算和无效计算,还要注意回溯的时候解除标记。

明天继续快速将之前看过的简单图论部分再看一遍,然后复习一下二分图最大匹配和网络流。

 

 

你可能感兴趣的:(训练日记)