ISIJ2020 不知道算不算游记
由于 CSP 的暴力分太高,我来了这里。
转发自 PKUWC 2020 游记
Day -53
要是不是别人说我进了,我还真没注意到。
居然混进了代表队 1,当然现在的水平远远没有代表队 1 的水平了。
为啥 zjr 没报名啊,队爷是他才对啊(
Day -45(模拟赛 1)
开场先把 T1,T2 码了。
然后低智商选手的事实就暴露出来了。
全世界都会 T3,自闭了。(我也不知道我会不会,但最后也没调出来)
upd:为什么有人用三分过了 T3,我就得挂,是不是我太菜了 /kk(弄得我以为三分是假的
后来我想的是个枚举中位数,然后做个两个分段一次函数的和,然后求最值,然而细节巨多,就暴毙了……
upd2:我把一个 [-2e9,2e9] 的数减了一个 [-2e9,2e9] 的数,成功爆 int 了。这么恶心的吗……
upd3:T4 的计分修了,勉强卡上了 300 分,然而还是丢脸 /dk
upd4:26 个人打了,我 rk10,308 分,果然是远远不到一队水平了。
这里放个简要题解(没有题意,别想了)
T1:简单贪心,三个数都尽可能靠近 \(\frac{n}{3}\) 即可。
T2:简单数位 dp,\(f_{i,j,0/1}\) 表示填了前 \(i\) 位,上一个填了 \(j\),目前这个数是否顶到上界。
T3:
比较长,折起来了
设 \(a\) 的前两个数为 \(x,y\),那么是 \(x,y,y-x,-x,-y,x-y\) 的六个一循环。把模 6 为 0,4,5 的 \(i\) 的 \(b_i\) 取反,就可以看成是 \(x,y,y-x\) 这样循环。
贡献大概可以写成 \(\sum |a_i-x|+\sum |b_i-y|+\sum |c_i-(y-x)|=\sum |a_i-x|+\sum |b_i-y|+\sum |(c_i+x)-y|\).
假如我们枚举了 \(x\),那么 \(y\) 的最优值是个小学数学。对这些数排序可以做到预处理 \(O(n\log n)\),单次只需要归并的 \(O(n)\)。
发现这个关于 \(x\) 是凸的,三分即可。
顺便证一下凸性:
首先,当 \(x\) 增大时,大于 \(x\) 的 \(a_i\) 的个数变多,所以这一块关于 \(x\) 斜率递增。
第二部分可以看成所有 \(c\) 向右不断平移,所以 \(b_i\) 和 \(c_i+x\) 的中位数会不断变大,同时大于中位数的 \(c_i+x\) 的个数会变多。这一块的斜率关于 \(x\) 也递增。
所以整个关于 \(x\) 的斜率递增。
T4:
比较长,折起来了
首先有个显然的 \(O(na^2)\) 的 dp 做法。
\(f_i\) 表示目前的体积是 \(i\),只考虑体积填到 \(i\) 之后的操作的花费的话的最大价值。从大到小枚举 \(i\),转移枚举用哪个实验。\[f_i=\max_{j=1}^n\min_{k=i+l_j}^{i+r_j}(f_k-c_j) \]用 \(n\) 个单调队列可以做到时空复杂度 \(O(na)\),恭喜点名被卡。(听说用 deque 就能艹过去???)
我们时时刻刻维护一个 \(mn_r\),表示 \([i,r]\) 的 \(r\) 的最大值。这时转移到 \(f_{i-l_j}\),应该从 \(mn_{i-l_j+r_j}\) 转移到。
那么怎么维护 \(mn\) 呢?维护一个从栈顶到栈底单调递减的单调栈。每次压入一个数,如果比栈顶小,用并查集把栈顶的父亲设成自己。
时间复杂度 \(O(na\mathrm{DSU}(a))\),空间复杂度 \(O(a)\),实际表现十分优秀。
Day -38(Code+ 7)
全体 ISIJ 选手都要来打,我也不知道为什么(
对自己太有自信了,报了难的那组。
然后不知道跟什么一样,爆零了。
太丢脸了,不想写了。
Day -31(模拟赛 2)
开场还是码了 T1。T2 一眼不会,T3 一看是个板子?
去写 T3,然后挂了。撑死 90 上不去了,剩下两个点 MLE。
滚回去 T2。好像可以用个套路……
码完接着搞 T3,把各种东西换成 short,然而分数完全没变。自闭了。
最后半小时会了 T4(还不知道真不真),最后没调出来。
rk11,比上次还丢脸。
upd:好了,我的 T4 是假的 /cy
那最后没调出来也没那么难受了
个鬼啊,说不定能多骗点分
简要题解:
T1:\(nxt_i\) 表示 \(i\) 后面第一个比 \(i\) 高的位置。离线,按询问高度排序,每次把比这个高度小的建筑加进去,加的时候进行 \([i,nxt_i-1]\) 区间加一,然后全局最大值。
T2:要用到一个套路性质:非负权边树上,\(v\) 为离点 \(u\) 最远的点。那么 \(v\) 一定是某条直径的某个端点。那么倒过来,维护每个联通块的直径,合并就六种情况。
T3:真的完全是线段树分治裸题。但是怎么挂的我也不知道……
T4:二分一波。从左往右扫描线,对于一条竖线上的每个点,以它为右上角的矩形中有点,等价于它后面一段长 \(h-1\) 区间中,最大的纵坐标与当前扫到的纵坐标差不超过 \(w-1\)。那么加入一个点就区间取 min,判断就全局 min。(看起来很 trivial,然而我为什么会没想到……)
Day ???
不是很想更,咕着。
以后无聊了再来更。
Day 10
似乎又垫底了,开心。
搞 whk 去了。