Austra @ 2022-08-25 16:41:36
#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;
}
by eigw22h619 @ 2022-08-25 16:59:10
注意常数。用unordered_map就行了。
为什么这部分可以不带log非要带呢
by Austra @ 2022-08-25 17:21:24
@eigw22h619 这是离散化啊,没有map也会有二分补上这个log
by eigw22h619 @ 2022-08-25 20:37:50
之前去干一些神秘事情去了...。不懂啊我加了个"unordered_"一交就过了啊