SNOI2020(未完)

SNOI

D1T2

打表发现获胜当且仅当 n − 1 n-1 n1 的斐波那契表示中最低位对应的斐波那契数 ≤ k \le k k。剩下的就是一个比较简单的数位 DP 了,从高到低考虑即可。时间复杂度 Θ ( T log ⁡ n ) \Theta(T \log n) Θ(Tlogn)
代码

D1T3

把 Beats 和 EITKTT 整到一块。

我们首先考虑每个节点的 p r e pre pre s u f suf suf 的决策发生变化的次数(其中由 KTT 部分触发的那部分)。注意到 p r e pre pre 的决策点只会递增,而在一个节点发生斜率切换的必要条件是决策位置从 [ l , m i d ] [l, mid] [l,mid] 切换到了 [ m i d + 1 , r ] [mid+1, r] [mid+1,r]。每个节点最多触发一次,故 p r e , s u f pre, suf pre,suf 的总共额外复杂度是 Θ ( n log ⁡ n ) \Theta(n\log n) Θ(nlogn)

因此我们现在知道 Beats + 「KTT 维护 p r e pre pre s u f suf suf」的总共 dfs 到的节点数是 Θ ( ( n + q ) log ⁡ n ) \Theta((n + q)\log n) Θ((n+q)logn) 的。我们沿用势能分析,是 Θ ( ( n + q ) log ⁡ 3 n ) \Theta((n+q)\log^3 n) Θ((n+q)log3n)

代码

D2T1

首先考虑任给两个集合怎么做。这等价于在一颗有根树上建立一个匹配,让配对的点 LCA 深度之和最小。我们贪心的自底向上匹配即可。

那么这个题就在两个串拼接出的后缀树上定位出来就好了。时间复杂度 Θ ( n ∣ Σ ∣ ) \Theta(n|\Sigma|) Θ(nΣ)(我写的用 SAM 建后缀树)
代码

D2T3

这个题的限制并不强,感觉可持久化好像不是啥特别的限制。
首先考虑往上灌水的操作,这个主要是找出左右第一个 ≥ h \ge h h 的隔板,在线段树上维护整段的隔板最高高度就可以做到。
抽水的话其实还是相当于要先扣出往两边走出的 ≤ h \le h h 隔板部分的单调栈,因此抽水我们考虑给 tag 增加一种可能性,就是从整段从一边抽空,但是已知这段边界之外有一个长为 x x x 的隔板。注意在提升一块隔板的时候这个 tag 也是要下推的。整个问题没有什么均摊的情况,所以直接可持久化就好了。离线好像也没想到什么避免空间 Θ ( n + m log ⁡ n ) \Theta(n + m\log n) Θ(n+mlogn) 的办法。
代码

你可能感兴趣的:(题集/比赛题解)