大概抽象一下就是有一个长度为 n 的不降的数列,数列权值只有 m 种,我可以在 O(n) 求某个位置的值。那我用下面这份伪代码,时间复杂度是 O(nmlogn) 的吗?
void solve(int l,int r,int L,int R)
{
if(L==R){for(int i=l;i<=r;i++) ans[i]=L;return;}
int mid=(l+r)>>1,x=Query(mid);
ans[mid]=x;solve(l,mid-1,L,x);solve(mid+1,r,x,R);
}