修改的时候不应该是修改 [pre[i]+1,i] 吗,为什么写成 [pre[i],i−1] 才能过,这样 i 这个点在下一次遇到 a[i] 之前不就会少算 1 吗?
signed main()
{
n=read(),k=read();
FOR(i,1,n) a[i]=read(),pre[i]=las[a[i]],las[a[i]]=i;
FOR(i,1,k){
memset(tr,0,sizeof tr);
memset(lazy,0,sizeof lazy);
build(1,0,n,i-1);
FOR(j,1,n){
modify(1,0,n,pre[j],j-1,1);
f[i][j]=query(1,0,n,i-1,j-1);
}
}
printf("%lld",f[k][n]);
return 0;
}