Submission #1314652

#TimeUsernameProblemLanguageResultExecution timeMemory
1314652joshjuiceMountains (NOI20_mountains)C++20
100 / 100
251 ms16836 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...