转眼间,暑期训练已经过了大半了。这半个多月以来也做了很多题,不过还是个菜鸡。。。
上一个专题是字符串专题,不过因为那个专题的题目没有写多少,所以。。。放到以后等做的题多一些再更新吧
这两天学数据结构确实收获不少,虽说之前对线段树,BIT这些早有耳闻,不过也仅仅是限于了解的层面,没有像最近几天系统的训练过。。。涨了很多姿势,不过题是做不完的QAQ。。。
Day 20
这一天的题还好没那么凶残(和后几天比),主要讲的是单调队列和BIT。BIT还不是很深入。
像单调队列的话,其实很常见,不过做题时不太容易想到
A- hdu3415
求环上的最大子串
这道题是一道好题。首先求最大子串是一个经典的dp问题,首先断环成链,这里用单调队列优化dp。n方的做法时很显然的,通过单调队列舍弃不能成为最优解的点,优化成O(n)。
G - hdu6319
这道多校的题还是挺难的啊,求区间最大值这个很好求,就是滑动窗口问题。但是求count就不好求了。网上的神奇做法是将整个数组倒过来求一次单调队列,最后剩下的就是count的值,Orz,自己确实想不到。。。不过还真是这样的。。。
剩下有几道BIT的题
E - poj1990
首先想到按权值排序后,这题就变成了n方的题,考虑优化。记录每个牛之前所有牛的位置和和牛的个数,就可以算出这只牛的答案,这一步复杂度使用两个树状数组维护后是logn的,共需扫描n只牛,总复杂度nlogn
F - poj1195
二维树状数组裸题
J - poj3067
转化树状数组求逆序对问题
H - poj3321
这道题题解里采用了我之前从来不知道的dfs序(时间戳)来建立树状数组,很奇妙。。。
Day 21
这一天似乎讲了整整一天的线段树,做了些题后,我从一个线段树几乎不会的蒟蒻,变成了线段树刚刚入门的蒟蒻。。。
wym大佬将线段树的lazy操作分成了四种题型,而弱弱的我只做完了前两种。。。。
前置技能:单点更新,区间查询
A,B,C属于此类型,C题好像还得字符串处理,就没做了。。。(话说刚学完字符串)
(1)区间加,区间乘
这种应该是最裸的题了,比赛时应该也不会考,不过有助于我们分析标记传递的整个过程。
像D,E都属于这种类型。。。
(2)区间收敛
像区间除,区间取欧拉函数或者自己搞个什么函数的,都是这种,套路很明确。传递标记时不用传到最下方,只要当前区间已经达到收敛,就可以return 了。
(3)区间加等比数列/等比数列
***待补
(4)区间取max
***待补
扫描线和离散化
这个之前确实没怎么涉及到,听过课后又涨了姿势。不过离散化这个还是挺重要的,已经做过好几道题涉及离散化了。。。
似乎xdoj还有几道题,整理过后再发题解。。。
Day 22
动态开点,可持久化数据结构(主席树,可持久化并查集)
这个内容之前基本上没有涉及了吧。。。wang聚聚tql
感觉课堂听了后自己看了几篇大佬博客,终于稍微明白了点,也没完全明白。。。
还是做几道题熟悉一下
(可持久化并查集还没会,5555)
B - bzoj1452
二维树状数组,有100种颜色,那么就维护100个二维BIT。。。
至于add,ask操作吗,多加了一层for循环,差分求区间和是稍微复杂了点,不过有模板的话(逃)
C - hdu6183
神题,被卡成狗,T了20发,最后看了网上博客剪枝滚了过去。。。
这道题硬是用50颗线段树搞的话,QAQ。。。
所以get新姿势 ----> 动态开点
所谓动态开点,就是用到这个点时再添加,单次操作logn,总空间复杂度nlogn。
第一次写动态开点就写炸了。。。
D - hdu2665
题目坑差评,明明是区间第k小,被题面写成区间第k大。
这题用主席树,套个板子。。。(思想还是大概要了解的)
不过由于实现时用原来的线段树时细节较多,这里还是套的板子。。。
E - bzoj1878
这题其实之前做过,是用莫队做的(优雅)。虽然n根号n的复杂度对于洛谷的1s有点少,不过bzoj的4s足够了啊
几天用主席树做了一遍 (找别人博客抄了一遍),算是对主席树加深一点了解。
听说还有树状数组,之后再补吧。。。
Day 23
今天讲了LCA和树剖,之前这两个==没学,今天花了整整一天的时间恶补了一下。。。(结果只做了两题。。。)
感觉这两题都是不错的,所以我将它们的题解单独写成了博客,下面是这两篇题解的链接:
bzoj4034
https://blog.csdn.net/star_moon0309/article/details/81987563
这道题做完算是入了门
bzoj3626
https://blog.csdn.net/star_moon0309/article/details/81987295
这道OI的省选题出的很好,有一定思维,非常推荐做一下~
Day 24
今天讲的内容似乎并不比昨天简单。。。
主要内容:莫队,分块,CDQ和整体二分,树套树。。。
窝太弱了,莫队和分块还没去刷题,一天几乎都在看后两项了,然而还是。。。。。。
下面贴上一道CDQ的经典问题—— 动态逆序对(bzoj3295)
https://blog.csdn.net/star_moon0309/article/details/82024715
还有一道树套树的题,第一次做树套树,身体被掏空QAQ
https://blog.csdn.net/star_moon0309/article/details/82024467