inline void cdq(int l,int r)
{
if(l==r)return ;
int mid=l+r>>1;
cdq(l,mid),cdq(mid+1,r);
int s=0;
for(register int i=l;i<=mid;++i)s+=a[i].x;
for(register int i=mid+1;i<=r;++i)
{
int tmp=0;
int j=l;
while(j<=mid&&a[j].x<=a[i].x)
{
tmp+=a[j].x;
j++;
}
ans+=a[i].v*((j-l)*a[i].x-tmp+s-tmp-(mid-j+1)*a[i].x);
}
sort(a+l,a+r+1,cmp1);
}
对于每一个右子区间的数都去枚举左边的每一个数,那复杂度不应该是 O(n2) 吗?最坏应该是可以做到所有左子区间的数都会被枚举一遍吧。
比如
50000
11
22
.........
5000050000
实测这组数据按照部分题解的写法是会T的,但是本题的数据下还是能跑过,是不是数据还是太水了(