#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Fenwick {
int n;
vector<ll> f;
Fenwick(int n): n(n), f(n+1, 0) {}
void update(int i, ll v) {
for (; i <= n; i += i & -i) f[i] += v;
}
ll query(int i) const {
ll s = 0;
for (; i > 0; i -= i & -i) s += f[i];
return s;
}
};
int main(){
ll n; cin >> n;
vector<ll> h(n);
for (ll i = 0; i < n; ++i) cin >> h[i];
vector<ll> v = h;
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
ll m = v.size();
vector<ll> c(n);
for (ll i = 0; i < n; ++i) c[i] = lower_bound(v.begin(), v.end(), h[i])-v.begin()+1;
Fenwick fwl(m), fwr(m);
vector<ll> l(n), r(n);
for (ll i = 0; i < n; ++i) {
ll x = c[i];
l[i] = fwl.query(x-1);
fwl.update(x, 1);
}
for (ll i = n-1; i >= 0; --i) {
ll x = c[i];
r[i] = fwr.query(x-1);
fwr.update(x, 1);
}
ll a = 0;
for (ll i = 0; i < n; ++i) {
a += l[i]*r[i];
}
cout << a;
}
| # | 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... |