只有40分!!!感觉读入就有问题
  • 板块P1908 逆序对
  • 楼主_Aurore_
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/5/23 17:40
  • 上次更新2023/10/28 00:46:09
查看原帖
只有40分!!!感觉读入就有问题
593595
_Aurore_楼主2022/5/23 17:40
#include<bits/stdc++.h> 
using namespace std;
long long n,tree[500010];
struct input{
	long long val,num;
}a[500010];
bool cmp1(input x,input y){return x.val<y.val;}
bool cmp2(input x,input y){return x.num<y.num;}
long long lowbit(long long x){return x&(-x);}
inline long long read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void discrete(){
	sort(a+1,a+n+1,cmp1);
	for(long long i=1;i<=n;i++) a[i].val=i;
	sort(a+1,a+n+1,cmp2);
} 
void add(long long x){
	for(long long i=x;i<=n;i+=lowbit(i)) tree[i]++;
}
long long query(long long x){
	long long ans=0;
	for(long long i=x;i>0;i-=lowbit(i)) ans+=tree[i];
	return ans;
}
int main(){
	n=read();
	for(long long i=1;i<=n;i++){
		a[i].val=read();
		a[i].num=i;
	} 
	discrete();//离散化 
	long long ans=0;
	for(long long i=1;i<=n;i++){
		ans=ans+(i-query(a[i].val)-1);
		add(a[i].val);
	}
	cout<<ans;
	return 0; 
}
2022/5/23 17:40
加载中...