退役前的做题记录2.0
这里主要记录一些做过的但没必要单独发一篇博客的题。。
[LOJ3083][GXOI/GZOI2019]与或和:单调栈
本质就是一个条形图矩形计数,每一行用单调栈跑一下就好了。
核心代码:
int solve(int *ht){
int ret=0;top=0;
rin(i,1,n+1){
while(top&&ht[sta[top]]>ht[i]){
int l=sta[top-1]+1,r=i-1,wd=r-l+1;
ret=(ret+1ll*(wd+1)*wd/2*(ht[sta[top]]-std::max(ht[i],ht[sta[top-1]])))%MOD;
--top;
}
sta[++top]=i;
}
return ret;
}
[LOJ2537][PKUWC2018]Minimax:期望DP+线段树合并
离散化后权值为下标,线段树合并的时候顺便记一个概率的前缀和就好了。
[LOJ6432][PKUSC2018]真实排名:双指针法+组合数学
对每个数讨论是否( imes 2),唯一需要注意是特判(A_i=0)的情况。
[LOJ3058][HNOI2019]白兔之舞:单位根反演+矩阵快速幂+任意模数NTT
单位根反演的过程比较显然。唯一的难点就是(或者说是一个Trick),我们要想办法把(jt)去掉,可以这样:
[jt=inom{j+t}{2}-inom{j}{2}-inom{t}{2}
]
之后跑个(MTT)就好了。