newbie做题记录2

发布时间 2023-12-28 07:54:54作者: blueparrot

P9871 [NOIP2023] 天天爱打卡

\(dp[i]\) 表示前 \(i\) 天的最大答案。转移是容易的且是立方级别的,直接树状数组优化可以做到 \(n^2logn\) ,离散化之后能拿到 52 分。正解的话,类似 AT_dp_w 的技巧,发现转移是这个东西:

int pos=(a[j-1]==a[j]-1)?max(0ll,j-2):j-1;
dp[i]=max(dp[i],dp[pos]+ask(j)-(a[i]-a[j]+1)*d);

然后线段树维护 ask(j)+a[j]*d 就行了,每次支持区间修改区间查 max ,不知道为什么跑的很慢。