【批发】0630-0708

来源:互联网 发布:mac qq怎么退出 编辑:程序博客网 时间:2024/06/09 17:27

0630

今天上午是先考试。最简单的第三题,我和舒天都用的记忆优化,但是只能过40%。这个题的正解正如魏精所讲,他把dp的结果存在了两个行列数组里面,大大优化了时间。第一题是一个区间DP,在i-j的区间中划分为不同的块然后更新即可。第二题最难,但不同的方法多种多样。我的DP方程是f[i][j] = min(max(f[i-k][j], f[k-1][j-1])),存的ij是层数和蛋数,这样做我过了20%。另外可以发现当蛋数多于100,显然蛋数可以记为无限多,二分即可,可过20%的特殊数据。这题的正解呢是把DP存的答案与条件换位置:用f[i][j]=k表示用i个蛋试j次可以最多试出多少层。因为层数非常大,而当i>3时,f的速度增长非常迅速,占用空间和时间非常小,可以过完100%

下午讲的是树形DP,就感觉像是图与DP的结合。求最长路径等方法均用到了整个子树已经得到的数据进行维护。这样做大大减小了时间,比暴搜优化了极多。而几乎树形DP都与搜父,搜子有关,虽说没有什么固定的方程来维护,但实现还是不难。


0701

今天上午下午都在讲课呢。首先是上午讲的数位DP:这个数位DP就是把一些数位取或不取保存在一个长的二进制数中,如果取就是1,不取就是0。在数位中要插入一个某位要取时,可以给这个值加上(或是异或)1左移那么多位。这样做可以将一个很长很大的只取01的多维简化为一个int

再说队列优化,当你算出一个结果,在这个队列中你把这个结果放在那两个比他优和比他差的结果之间存着。当范围不断缩小,前面的当初的最优解可能不符条件并弹栈。最后最优解自然显现

接下来就是一个叫什么凸包的东西。为了保证这个凸包上(下)凸壳一直在右(左)转,用一个xiyixjyj的乘积式表示向量,并不断更新弹栈。这个不是单独拿来考的,这个算法可以用来实现斜率优化!斜率优化就是先找出斜率单增或单减是否存在的式子,然后用建凸壳的方式来对这个栈进行维护,同时和之前一样,前面不时也要弹出。

下午杂题。杂题基本上考的是某种特别精巧的思路。拔草的二分答案做法十分有趣,而坐电梯那道题更是搞。最后不知道什么神奇的思考题:石子合并乘法版,这个所有解的代价居然一样……233……


0702 休


0703

今天上午讲的数据结构的一点点基础。我们对比了数组,栈/队列,线段树的修改,插入,查询复杂度,对以后解题的选用有所帮助。栈的有个例子是表达式求值,将表达式依次压入栈,判断优先度是否低,然后取出运算压回去。另一个就是DFS的手动建栈。由于针对链等结构进行DFS可能层数太深爆栈,因此自建一个栈来储存的做法可以防止RE。线段树和树状数组是讲过的内容,树状数组:单点修改,区间查询。使用差分数列:区间修改,单点查询。而使用线段树可以单点修改查询和区间修改,如果同时实现区间修改可以打lazy,向下搜的时候就pushdown。题型的变种多,对于不同题型要采用不同的存储数据和结构。

下午刷题刷题刷题,我主要刷了cdqz上的数据结构模板题,各类模板都有所了解和掌握,同时也掌握了“离线”(以前从未了解)。对于单点/区间的修改,对于区间和//k最值/不同种类数/点个数的查询,都有不同的方法,熟悉了自然就得心应手!


0704

今天上午是考试。先来分析题目:第一题,先找规律,对于每个连通图,若是无环的,每一个点都可能不选,总情况是点数ni;如果是有环的,根据题意一定是个奇环树,环内一定有且只有2种。把这些连通图情况个数乘法原理即可。第二题我优化数组(没错,数组)水出前30和后40。事实上此题:通过维护线段树做,更改时对比前一区间和后一区间的max选择进行修改的区间。第三题原题不说。

下午是数据结构2,先是并查集。这个并查集不压缩但存入一个栈,可以做到撤销操作。然后讲了一些比较玄学的算法,比如分块……就是求一段时包含多个块直接获取ans,如果范围很小直接+答案。否则当你用前缀和会被求(nn)卡,累加法会被求(1n)卡(假如你不会写线段树)。然后就是更为玄学的做法,如果由ans(l,r)可以推出ans(l±1,r±1),那么把左右端点越近的排在一起,比如(l,r)(li,ri)很近,可以通过abs(l-li)+abs(r-ri)次计算得出答案(前提是允许离线操作)。这段距离就叫曼哈顿距离,这种算法就是莫队算法。


0705

今日讲了一些高难线段树。首先是可持久化线段树,鉴于它支持撤销,每当数据更新时,存在另一个root[操作次数]里面,其他的可以沿用之前的结果。撤销时把下一个root变得和上xroot相等即可!主席树更加玄妙(该算法发明人简称同胡锦涛),我感觉几句话讲不太清楚,这个把什么各种前缀和线段树啊可持久化线段树啊rua到了一起,主体是一个写法上很玄学的函数式线段树,主要用于解答第k大问题,建树之前还有必要离散化一下。后来就是树套树,树套树其实就是对于外层树的每一个节点都包含了一个内层树,因此在里外相套的结构下可以表示出任意一个二维区间,并且可以像普通线段树般打lazy标记。在查询时先查外层,找到一个对应区间再查内层,lazy标记照常下放,最后对每个内层返回的ans在外层再相加即可。

下午刷题,遇见新式错误:段错误。其他没什么好说的,一切比较正常。


0706

上午考试,分析一下题:第一题求区间元素种类数(不修改),这个本来标程用可持久化前缀值域线段树(aka.主席树)来做的,但是题目中和评测中均为说明不可离线,于是我的莫队算法AC了哈哈哈!这个基本可以算是个标准的模板题,不做太多讲述。第二题纯模板题,线段树套线段树,要求支持query min&maxupdate两种操作,很好实现,树套树可以轻松通过。第三题据说是个斜率优化的DP,我写暴力DP只写了5行,本来就只能A50的,关键是还没有开longlong,居然只过了10。斜率方程因为篇幅有限(懒得用公式编辑器了)就不推了。

下午讲的是STL的各种用法(前面的略过),最主要的是bitset的各种优化高端操作。相比bool数组来说,这个耗费空间小,操作方便。经典题目是多维偏序!!一维快排,二维归并,三维树,四维树套树,而五维树套树套树?否也!五维开始用bitset!先按维排,然后记下前x * sqrt(n)个数的bitset。查询直接使用bitset加枚举。

期待明天平衡树,估计要被虐瓜……


0707

今天讲的东西真是够难!主要就是平衡树,在此之前先讲了二叉搜索树(BST)。BST就是中序遍历是单增序列的树,对于每一个节点,若子树不为空,则左子树所有值比它小,右子树反之。但是怕出链卡数据,建立在这样的基础上,便有了平衡树!先是替罪羊树,实现左右子树极不平衡时(max(子树)>α*父)自重组。为了使他能适当重组并且不会持续重组,α一般设0.7。接下来是树堆treap(是树不是堆),这个算法给每个节点一个随机rank,让它按大小和rank一起排,因为是随机的,基本控制了树的深度(除非你找了个特别玄学的随机种子或是你的随机种子被针对了),再用mergesplit拆拆合合。它较好做可持久化!第三是Splay,昨天wxh大神说平衡树只掌握Splay就行了……这个Splay啊,通过旋转树保持平衡,并且中序遍历不会变。插的时候把前驱转到根,再把后继转到前驱的右子,最后插到后继的左子即可。


0708 休

0709 休


0710

(蛤,幸好还是rank1)今天上午是考试,考试主要内容二三题纯搞平衡树,但是没人AC,甚至都没人超过50%。先说第一题吧,纯签到题,可以发现每次选的区间必定为奇数格子,在Aka涂黑后必定涂黑奇数格子,在Hib涂黑后必定黑了偶数格子,%2判断即可,压行两行搞定,水过。第二题纯暴力过20%,我伪DP暴力(f[i][0/1])过了30%,用可以拆开反转的treap搞掉。第三题是没有区间相减性的,所以不可以主席树。而我又建线段树耍莫队(莫队真的好东西)过了50%(多一个log)。事实上可以分块大法来做,连续块有直接答案,向块外扩张不到sqrt次得出答案,卡过。

下午又讲高端内容:这个这个树链の剖分(常用重链の剖分),可以兹磁更多树上的操作啦。无论你是路径改,单点改,路径max,路径sum,它都可以轻松解决。具体:在树链上反复横跳跳出答案。我调了半天,但是调调就累了………………唉…………

原创粉丝点击