7:30–7:35 读题。
7:35–8:00 T1, n ≤ 1 0 5 n\leq 10^5 n≤105 的部分可以整除分块,分离一下贡献的系数就可以差分做。对于 100 p t s 100pts 100pts 暂时没什么想法,也许可以拓展也许不能。
8:00–8:30 T2, Q = 0 Q=0 Q=0 直接模拟。暂时不知道 n ≤ 1 0 4 n\leq 10^4 n≤104 有什么用。
8:30–9:00 T3, n ≤ 100 , m ≤ 100 n\leq 100,m\leq 100 n≤100,m≤100 可以直接背包。对于 n ≤ 100 , m ≤ 1 0 9 n\leq 100,m\leq 10^9 n≤100,m≤109 可以考虑维护模 n n n 意义下的剩余系,这样也许就能直接做了。
9:00–10:00 T3,发现如果看成剩余系多重背包,那么对于每个元素是一个 C m x + C m x + n + C m x + n + n + . . . C_m^x+C_m^{x+n}+C_m^{x+n+n}+... Cmx+Cmx+n+Cmx+n+n+... 的东西,这玩意我不会求。
10:00–12:20 T2,发现对于一个新加的数,它的贡献就是以它为端点与最大值相加的和。那么就要支持维护出每个点开头的k元素的答案,这玩意不好动态维护,貌似还要支持撤销。
12:20–12:30 最后十分钟忽然意识到T3 的 30pts只要用多项式循环卷积倍增一下就行了。自闭了。
T1: 沉迷分块,没有找到贡献的关系,不然只要二维数点一下就行了。做题还是要及时跳出来,不要陷入死胡同。
T2: 性质想到了,但没想到线段树分治,也没想到怎么支持撤销。 luogu题解竟然直接用vector存原状态暴力撤销真简单粗暴,虽然说空间复杂度几乎不对,这种神奇撤销方式get到了。
T3: 一直在想怎么解决组合数的问题,直到比赛结束前10min才意识到每个背包等价,可以倍增卷积。