#include <bits/stdc++.h>
using namespace std;
struct BIT{
int64_t N ;
vector<int64_t> x ;
void reset(int64_t size){
N = size ;
x.assign(N+1, 0) ;
}
// 1 <= i <= N
void add(int64_t i, int64_t v=1){
for( ; i<=N ; i+=i&-i )
x[i] += v ;
}
// sum(x[1~i])
auto get(int64_t i){
int64_t s = 0 ;
for( ; i ; i-=i&-i )
s += x[i] ;
return s ;
}
} ;
int64_t N ;
map<int64_t,vector<int64_t>> H ;
int main(){
ios_base::sync_with_stdio(0) ;
cin.tie(0) ;
cin >> N ;
for( int64_t i=1 ; i<=N ; i++ ){
int64_t h ;
cin >> h ;
if( H.find(h) == H.end() )
H[h] = {i} ;
else
H[h].push_back(i) ;
}
BIT bit ;
bit.reset(N) ;
int64_t ans = 0 ;
for( auto [h,x] : H ){
// cout << h << ":";
for( auto &xx : x ){
// cout << setw(2) << xx ;
auto L = bit.get(xx) ;
auto R = bit.get(N) - L ;
ans += L*R ;
}
for( auto &xx : x )
bit.add(xx, 1) ;
// cout << endl ;
}
cout << ans << endl ;
return 0 ;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |