// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll n, m, q, day = 0;
cin >> n >> m >> q;
vector<pair<ll,ll>> lr(m);
for (ll i = 0; i < m; i++) {
cin >> lr[i].first >> lr[i].second;
}
vector<ll> last(n + 1, -1);
unordered_map<ll, ll> freq;
freq.reserve(1 << 20);
freq.max_load_factor(0.7f);
for (ll i = 0; i < m; i++) {
ll li = lr[i].first, ri = lr[i].second;
for (ll j = li; j <= ri; j++) {
ll prev = last[j];
last[j] = day;
day++;
if (prev >= 0) {
ll g = day - prev - 2;
freq[g]++;
}
}
}
vector<ll> s(q);
for (ll i = 0; i < q; i++) {
cin >> s[i];
}
vector<pair<ll,ll>> gaps;
gaps.reserve(freq.size());
for (auto &p : freq) {
gaps.push_back(p);
}
sort(gaps.begin(), gaps.end());
int F = gaps.size();
vector<ll> suffix(F + 1, 0);
for (int i = F - 1; i >= 0; i--) {
suffix[i] = suffix[i + 1] + gaps[i].second;
}
for (ll Q = 0; Q < q; Q++) {
auto it = lower_bound(
gaps.begin(), gaps.end(),
make_pair(s[Q], 0LL)
);
if (it == gaps.end()) {
cout << 0;
} else {
ll idx = it - gaps.begin();
cout << suffix[idx];
}
if (Q + 1 < q) cout << ' ';
}
cout << '\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... |