如下是我预处理第 i→j 块内的众数和众数出现次数的代码,tongi,j 是 j 到 i 块的前缀和,maxx 是指出现次数,maxxx 是指众数。这个复杂度应该是 O(n×n×n)=O(n2) 啊,但过了,且不开 O2 最慢的一个点只有 686ms.
for(int i=1;i<=t;i++){
for(int j=i;j<=t;j++){
int res=0,num=INF;
for(int k=st[i];k<=ed[j];k++){
if(tong[j][a[k]]-tong[i-1][a[k]]>res){
res=tong[j][a[k]]-tong[i-1][a[k]];
num=a[k];
}else if(tong[j][a[k]]-tong[i-1][a[k]]==res){
num=min(num,a[k]);
}
}
maxx[i][j]=res,maxxx[i][j]=num;
}
}