제목 설명
제리 톰 고양이와 마우스 경연 대회 최근 있지만, 모든 후, 그들은하지 않는 게임을 시작의 종류와 연주해야 좋아하나요, 성인, 그리고 지금은 통계를 재생 것을 좋아합니다. 최근, 인간에 TOM 고양이는 이제 "역순"뭔가로 정의된다 무엇인가라는 : 양의 정수 기간의 주어진 순서를 들어, 리버스 AJ 내가 <j는 인공 지능의 정렬 순서입니다> 좋아. 그들은 주어진 기간과 일치 누구든지이 개념을 아는 것은 반대 순서로 서열의 양의 정수를 계산한다.
업데이트 : 데이터가 강화되고있다.
입력 형식
첫 행, 숫자 N은 시퀀스 번호 N있다.
제 2 라인 수 (n)의 소정의 시퀀스. 각각의 시퀀스 번호를 초과하지 않는 10 ^ 9
출력 형식
역순의 소정 수.
설명 / 팁
데이터의 25 %, n≤2500
데이터의 50 %를 n≤4 × 10 ^ 4
모든 데이터, n≤5 × 10 ^ 5
빠른 입출력을 사용하십시오
N 그것은 chen_zhe하여 50 만 평방 줄 이상 안
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
const int N=5e5+10;
#define int long long
using namespace std;
int c[N],n,a[N],b[N];
inline void add(int x,int y){
for(;x<=n;x+=x&(-x))c[x]+=y;
}
inline int sum(int x){
int ans=0;
for(;x;x-=x&(-x))ans+=c[x];
return ans;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
b[i]=a[i];
}
sort(b+1,b+1+n);
int len=unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++)
a[i]=lower_bound(b+1,b+1+len,a[i])-b;
int ans=0;
for(int i=n;i>=1;i--){
ans+=sum(a[i]-1);
add(a[i],1);
}
cout<<ans<<endl;
}