# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1277367 | vuquangsang | Mountains (NOI20_mountains) | C++20 | 113 ms | 7620 KiB |
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 2;
int n;
long long a[N];
void compress()
{
vector<long long> V;
for(int i = 1; i <= n; i++) V.push_back(a[i]);
sort(V.begin(), V.end());
for(int i = 1; i <= n;i++) {
a[i] = lower_bound(V.begin(), V.end(), a[i]) - V.begin() + 1;
}
}
long long bit[N];
void upd(int x, int v)
{
for(; x <= n; x += x &-x) bit[x] += v;
}
long long get(int x)
{
long long ans = 0;
for(; x >= 1; x -= x & -x) ans += bit[x];
return ans;
}
long long get(int l, int r)
{
return get(r) - get(l - 1);
}
long long Res[N];
void solve()
{
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
compress();
for(int i = 1; i <= n; i++) {
Res[i] = get(1, a[i] - 1);
upd(a[i], 1);
}
for(int i = 1; i <= n; i++) bit[i] = 0;
long long ans = 0;
for(int i = 1; i <= n; i++) {
ans += get(a[i] + 1, n);
upd(a[i], Res[i]);
}
cout << ans;
}
main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define TASK "mountains"
if(fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
solve();
cerr << "\nTime" << 0.001 * clock() << "s "; return 0;
}
Compilation message (stderr)
# | 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... |