Submission #1316832

#TimeUsernameProblemLanguageResultExecution timeMemory
1316832vaishakhvInspections (NOI23_inspections)C++20
55 / 100
2093 ms13940 KiB
// 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...