nlogn为何会TLE?
  • 板块P1908 逆序对
  • 楼主Austra
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/8/25 16:41
  • 上次更新2023/10/27 13:43:06
查看原帖
nlogn为何会TLE?
124564
Austra楼主2022/8/25 16:41
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=5e5+5;
int n,tot,ans,a[MAXN],b[MAXN],c[MAXN];
map<int,int>h;
int ask(int x){
	int sum=0;
	for(;x;x-=x&-x)sum+=c[x];
	return sum;
}
void add(int x){
	for(;x<=n;x+=x&-x)c[x]++;
}
inline int read(){
	char c=getchar();int x=0,s=1;
	while(c<'0'||c>'9'){if(c=='-')s=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*s;
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	for(int i=1;i<=n;i++){
		if(b[i]!=b[i-1])h[b[i]]=++tot;
	}
	for(int i=1;i<=n;i++){
		a[i]=h[a[i]];
		add(a[i]);
		ans+=i-ask(a[i]);
	}
	cout<<ans;
	return 0;
}
2022/8/25 16:41
加载中...