dmy集训总结
反思
1.一个思路想好久还没有进展的时候应该要想想这东西是不是没什么前途了的。
2.暴力还是要好好打的,毕竟均分不到100的比赛拼的就是暴力了。
3.应该记住交互库的本质就是你每次要尽可能多得排除一些选项。
4.想数据结构这种很难写的东西还是应该先看看有没有更简单一点的做法,没有了再去写,毕竟这东西一调就是很久。
5.多手玩一下发现一些性质。
Day 1
开题,感觉不太久就会n^2的了,然后就想到你可以枚举最小值具体出现的位置,没太急着写,继续想正解了,但是到10点的时候还不会,就延续SN省集传统写暴力去了。
大概10点40的时候获得了60pts。
然后又看了看,感觉还是不太会优化什么的,跑去写后面暴力了,大概11点半把T2的10pts和T3的5pts都写完了,后面就回去莽T1正解,但是失败,到12点多感觉没什么时间了,就拼了T1的15pts和T2的10pts。
比赛后来延时了1h,因为好多人电脑都炸了,我中间也耽误了半个多小时,但是感觉继续写也是坐牢,就跑路吃饭了。
下午听题,发现T1正解和我的n^2做法毫无关系,尬住了,T2好像不是很困难,但是中午没睡觉,讲题的时候脑子非常混乱,没有完全理解。
晚上订了一下T1,然后Day2下午把T2给订了。
T1题解
首先能够注意到一个事情,就是你每次明确最高的那个灯的方向,就相当于是对着一个区间染色,并缩小完全空白的区间,于是可以得到一个区间dp的方案。
设dp[i][l][r]表示一个区间l到r还没有被染色的方案,所以转移是显然的。
然后考虑删掉i那一维,因为你最后分裂的一定是这个区间内部的一个最大值,接下来,打表可以发现,区间只会有O(n)个,这是因为每一个区间是会被便利到,只有在i到左右两边第一个比你大的位置这两个区间。
T2题解
部分分一:b=1
全部查到你的后面,你只有是前缀最大值才可能造成贡献,也即第一个位置上的数单调不降,所以统计答案是显然的。
部分分二:b=0
全部往前插,每次只要看你当前插入的点排名第几,对于大于你这个排名的询问,你都是会贡献原队头-新队头的。
每一个点不是都知道你最后的队头会是谁吗,然后考虑都是原-新,如果原<新的,相当于是要加两次这种贡献。
求队头上升的贡献。
维护当前可能成为最大值的序列
然后每一次上升的时候
Day 2
早上特别困,大概9点之前都没有什么真正的进展,9点的时候去洗了把脸,终于开始正经思考了。迅速会了20pts,然后思考了包括但不限于分组,把整个序列拆成两半等等方法,但是都失败了,(赛后发现两种拆分都是对的,但是我判断上面太唐了。
11点多的时候放弃挣扎了,去看T2。
首先感觉Sub1和Sub2的暴力是简单的,然后发现了有一个叫做 \(p[i]=i\) 的东西,当时感觉这东西是可做的,胡了依托不知名状物,但是没写,后面又看了看Sub5,发现直接扫描线状物就能做,然后直接开写,写完发现Sub3更好写,于是35pts跑路了,最后也没有写Sub4。
后面继续磕T1,但是没有获得什么别的分数了。
下午听讲题,才知道T1部分分是一个随机化,感觉这种类似的题做的还是太少了,完全没想到。
那个构造,感觉很人类智慧的吧。
Day 3
补题休整日。
早上去写apio之后jsy拉的那个交互作业了。
晚上unr笔试,所以day2晚上和day3下午都过了一遍笔试内容,但是感觉还是很容易忘掉。
笔试第一遍果不其然挂分了,错在那个杀死后台进程和终止进程,但是后来给改过来了。
Day 4
unr Day 1
最后得分107,离Cu线差了10pts。
赛时先开T1,迅速得出了每个点只能有一次改变的结论,然后想一想就知道每次改变的逻辑了,结果想歪到线段树了,胡了很大一坨东西上去,写到2h左右调不出来破防了,然后去看了看T2,感觉没什么思路,又跑路了。
这时候发现旁边的人过T1了,直接破防了,重新回去看T1,发现秒了,大概不到1h就过了。
然后开始写暴力。T2想了想也只会7pts,写完就去看T3了,发现这不是和displace之前讲的那题很像吗,于是迅速发现了A性质的优秀性质,结果写的时候,所有的cnt都忘了先+1了,调到最后也没调出来,赛后回来倒是1秒发现了。
Day 5
70pts,拉完了。
unr Day 2
最后还Cu了,也是完全没想到了。
晚上和刘老师出去吃海鲜了,感觉这次还是尝到了很多不一样的东西。
还是先开T1,然后会了 \(n^4\),然后胡了好几版 \(n^3\),都发现假了,开始破防,然后继续想了一个多小时,仍然毫无进展,于是跑去看T2T3了。
看T2发现会了20,但是不想写,于是继续往后看。
看这T3,感觉A性质很可做啊,然后写写写,然后A性质过了,然后发现,这个东西扔到虚树上,岂不是对完了(其实没有,因为还需要考虑不在虚树上的点挂在虚树上),但是此时距离考试结束还有10min,破防了,赛后发现正解的大框架基本和这个一致,虽然给我时间我也会不了后面的维护吧,但还是很破防啊。
unr Day2T1题解
首先你需要发现一个性质,就是一个区间能够不花费代价地变为某个数的充分必要条件是 \(p_l\le p_r\)。
然后呢,事情就转变成了选择一些区间满足这一限制,然后要么不花费代价直接和i合并,要么花费1的代价和i合并。
接下来发现,你不花费代价和i合并的,可以归结为找到一个 \(l\),满足 \(p_l\le p_i\),然后给这个区间的都合并了,再往前面就不可能出现这种合并了。
于是我们成功踢掉了操作1,现在只剩下花费1的代价和i合并。这个东西随便写个dp线段树维护以下就行了对吧。

浙公网安备 33010602011771号