rt,这份是我写某题的部分代码
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=2e5+5,T=450;
int n,t,tot,cnt,a[N],ta[N],f[N],c[T][N],va[T],lt[T];
int main(){
scanf("%d",&n); t=(int)sqrt(n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
ta[i]=a[i];
}
sort(ta+1,ta+n+1);
tot=unique(ta+1,ta+n+1)-ta-1;
for(int i=1;i<=n;++i)
a[i]=lower_bound(ta+1,ta+tot+1,a[i])-ta;
for(int i=1;i<=n;++i)
for(int j=1;j<=t;++j) ++c[j][a[i]];
return 0;
}
结果发现后面的根号部分跑得奇慢(指1.2s 3e7),但把c[j][a[i]]改成c[j][i]或其他东西,或者不读入a[i]就跑得飞快,故求原因&解决方案