#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct BIT {
vector<int> bit;
int n;
BIT(int n) {
this->n = n;
bit.assign(n + 1, 0);
}
void add(int idx, int val) {
while (idx <= n) {
bit[idx] += val;
idx += idx & -idx;
}
}
int sum(int idx) {
int res = 0;
while (idx > 0) {
res += bit[idx];
idx -= idx & -idx;
}
return res;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<ll> A(N), transformed(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
transformed[i] = A[i] - 2LL * i;
}
// Coordinate compression
vector<ll> sorted = transformed;
sort(sorted.begin(), sorted.end());
sorted.erase(unique(sorted.begin(), sorted.end()), sorted.end());
int size = sorted.size();
BIT bit(size);
ll ans = 0;
for (int i = N - 1; i >= 0; --i) {
int pos = lower_bound(sorted.begin(), sorted.end(), transformed[i]) - sorted.begin() + 1;
ans += bit.sum(pos - 1);
bit.add(pos, 1);
}
cout << ans << "\n";
}
# | 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... |