在本地测试没有re,在atcoder的costom test里面测试了n=1200的数据也没有re,但是在洛谷上测试同样的数据就re了,交上去re了8个点
#include <iostream>
#include <algorithm>
using namespace std;
int n,a[510000];
int p[40][510000],high[40];
int mian()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
cout<<i<<endl;
}
cout<<"e";
sort(a+1,a+n+1);
cout<<"a";
for(int i=1;i<=n;i++)
high[i]=0;
cout<<"b";
for(int i=1;i<=n+1;i++)
for(int j=0;j<=30;j++)
p[j][i]=0;
cout<<"c";
for(int i=1;i<=n;i++)
for(int j=30;j>=1;j--)
if((a[i]>>(j-1))&1)
{
high[i]=j;
break;
}
cout<<"d";
for(int i=1;i<=30;i++)
for(int j=n;j>=1;j--)
{
p[i][j]=p[i][j+1];
if(((a[j]>>(i-1))&1)==1)
p[i][j]++;
}
cout<<"e";
long long ans=0;
for(int i=1;i<=n;i++)
{
if(a[i]==0)
{
ans+=n;
continue;
}
int k=lower_bound(high+1,high+n+1,high[i]+1)-high;
ans+=p[high[i]][k];
}
cout<<ans<<"\n";
return 0;
}
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
mian();
return 0;
}
可能加入了一些调试语句,但是应该不会影响re的吧