#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
ll n, q; cin >> n >> q;
vector<ll> h(n + 1); for (ll i = 1; i <= n; i++) cin >> h[i];
vector<ll> y(q + 1); for (ll i = 1; i <= q; i++) cin >> y[i];
vector<pii> a(n + 1); for (ll i = 1; i <= n; i++) a[i] = {h[i], i};
vector<pii> queries(q); for (ll i = 1; i <= q; i++) queries[i - 1] = {y[i], i};
vector<ll> answers(q + 1);
auto f = [](ll n) { return n * (n + 1) / 2; };
ll lastVal = INT_MAX;
auto g = [&](set<ll> s) {
ll ans = 0;
ll m = s.size();
vector<ll> v; v.push_back(0);
for (auto x: s) v.push_back(x);
v.push_back(n + 1);
for (int i = 1; i <= m + 1; i++) {
ans += f(v[i] - v[i - 1] - 1);
if (v[i - 1] == lastVal) break;
}
lastVal = v[1];
return ans;
};
sort(a.begin(), a.end());
sort(queries.rbegin(), queries.rend());
set<ll> s;
ll lastIdx = INT_MAX;
for (auto query: queries) {
ll plane = query.first;
ll target = plane + 1;
ll l = 1, r = n;
ll idx = -1;
while (l <= r) {
ll mid = (l + r) / 2;
if (a[mid].first < target) l = mid + 1;
else {
if (mid == 1) {
idx = mid;
break;
}
if (a[mid - 1].first < target) {
idx = mid;
break;
} else
r = mid;
}
}
if (idx == -1) {
answers[query.second] = f(n);
} else {
ll ans = 0;
for (ll j = idx; j <= n; j++) {
s.insert(a[j].second);
if (j >= lastIdx) break;
}
lastIdx = idx;
answers[query.second] = g(s);
}
}
for (ll i = 1; i <= q; i++) cout << answers[i] << "\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... |
# | 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... |