#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pii pair<int,int>
#define inp(name) freopen(name, "r", stdin);
#define out(name) freopen(name, "w", stdout);
const int N = 3e5 + 5;
const int mod = 998244353;
int n, cur = 0;
int a[N], ans[N], tree[N];
void update(int u, int v){
while (u <= cur){
tree[u] += v; u += (u & -u);
}
}
int get(int u){
int ans = 0;
while (u > 0){
ans += tree[u]; u -= (u & -u);
}
return ans;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
set <int> s; map <int, int> m;
for (int i = 1; i <= n; i ++){
cin >> a[i]; s.insert(a[i]);
ans[i] = 1;
}
for (auto i : s) m[i] = ++cur;
for (int i = 1; i <= n; i ++) a[i] = m[a[i]];
for (int i = 1; i <= n; i ++){
ans[i] *= get(a[i] - 1);
update(a[i], 1);
}
for (int i = 0; i <= cur; i ++) tree[i] = 0;
int res = 0;
for (int i = n; i >= 1; i --){
ans[i] *= get(a[i] - 1);
update(a[i], 1);
res += ans[i];
}
cout<< res;
}
# | 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... |