关于这种写法的复杂度
查看原帖
关于这种写法的复杂度
601681
Hanggoash楼主2024/9/8 12:13
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)O(n^2) 吗?最坏应该是可以做到所有左子区间的数都会被枚举一遍吧。

比如

5000050000

111\quad1

222\quad2

.........

500005000050000\quad50000

实测这组数据按照部分题解的写法是会T的,但是本题的数据下还是能跑过,是不是数据还是太水了(

2024/9/8 12:13
加载中...