这道题用 map 来离散化又T了。。想起来了有一次 CF 怕直接开数组过大使用 map 结果T了的悲剧故事。。。
能用数组 hash 的坚决不用 map
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<map>
using namespace std;
#define ll long long
ll bit[1000000];
#define P pair<ll,ll>
#define fst first
#define sec second
ll n;
void add(ll x,ll i)
{
while(i<=n)
{
bit[i]+=x;
i+=i&(-i);
}
}
ll sum(ll i)
{
ll ans=0;
while(i>0)
{
ans+=bit[i];
i-=i&(-i);
}
return ans;
}
P num[1000000];
ll tnum[1000000];
int main()
{
freopen("acm.in","r",stdin);
while(scanf("%lld",&n)!=EOF&&n!=0)
{
memset(bit,0,sizeof(bit));
memset(tnum,0,sizeof(tnum));
for(int i=1;i<=n;i++)
{
scanf("%lld",&num[i].fst);
num[i].sec=i;
}
sort(num+1,num+1+n);
for(int i=1;i<=n;i++)
tnum[num[i].sec]=i;
long long ans=0;
for(int i=1;i<=n;i++)
{
int index=tnum[i];
ans+=sum(index-1);
add(1,index);
}
cout<<n*(n-1)/2-ans<<endl;
}
return 0;
}