C++TLE50求助
查看原帖
C++TLE50求助
722468
MrJC_Pandingding楼主2023/5/7 08:14
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int id,va;
	friend bool operator<(const node &x,const node &y)
	{
		return x.va<y.va||x.va==y.va&&x.id<y.id;
	}
	friend bool operator>(const node &x,const node &y)
	{
		return y<x;
	}
};
int c[500010],i,n,x;
long long sumn;
node a[500010];
map<int,int>mpa;
map<node,int>mp;
int lowbit(int x)
{
	return x&-x;
}
void updat(int x,int y)
{
	int i;
	for(i=x;i<=n;i+=lowbit(i))
		c[i]+=y;
	return;
}
long long summ(int x)
{
	int i;
	long long ans=0ll;
	for(i=x;i>=1;i-=lowbit(i))
		ans+=c[i];
	return ans;
}
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;++i)
	{
		scanf("%d",&a[i].va);
		a[i].id=i;
		mp[a[i]]=i;
	}
	sort(a+1,a+n+1);
	for(i=1;i<=n;++i)
		a[i].va=mp[a[i]];
	for(i=1;i<=n;++i)
		mpa[a[i].va]=i;
	for(i=1;i<=n;++i)
		a[i].va=mpa[i];
	for(i=1;i<=n;++i)
	{
		sumn+=i-summ(a[i].va)-1;
		updat(a[i].va,1);
	}
	printf("%lld",sumn);
	return 0;
}

结果,悬赏关注。

2023/5/7 08:14
加载中...