求助复杂度

P4168 [Violet] 蒲公英

wujingfey @ 2023-10-18 09:49:42

如下是我预处理第 i\to j 块内的众数和众数出现次数的代码,tong_{i,j}ji 块的前缀和,maxx 是指出现次数,maxxx 是指众数。这个复杂度应该是 O(\sqrt{n}\times \sqrt{n}\times n)=O(n^2) 啊,但过了,且不开 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;
        }
    }

by EastSnowLotus @ 2023-10-18 09:57:23

常数小。很多远古根号题现在都可以平方过。

而且本题标签有 O2优化,所以不存在不开 O2 的可能性。


|