一半AC,一半WA
  • 板块P1908 逆序对
  • 楼主Liuyc1127
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/12/6 16:24
  • 上次更新2023/12/6 19:19:32
查看原帖
一半AC,一半WA
702407
Liuyc1127楼主2023/12/6 16:24
#include<bits/stdc++.h>
using namespace std;
int ans=0,cnt,sum[500009<<5],ls[500009<<5],rs[500009<<5],a[500009],rt;
void updata(int &p,int l,int r,int k) {
	if(p==0)
		p=++cnt;
	sum[p]++;
	if(l==r)
		return ;
	int mid=l+r>>1;
	if(k<=mid)
		updata(ls[p],l,mid,k);
	else
		updata(rs[p],mid+1,r,k);	
	return ;	
}
int check(int p,int l,int r,int k) {
	if(l==r)
		return 0;
	int mid=l+r>>1;
	if(k<=mid)
		return sum[rs[p]]+check(ls[p],l,mid,k);
	else
		return check(rs[p],mid+1,r,k);
}
signed main() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++)
		scanf("%lld",&a[i]);
	for(int i=1; i<=n; i++) {
		updata(rt,-1,1e9+3,a[i]);
		ans=ans+check(1,-1,1e9+3,a[i]);
	}
	cout<<ans<<"\n";
	return 0;
}
2023/12/6 16:24
加载中...