#include <bits/stdc++.h>
using namespace std;
#define int long long
multiset<array<int, 3>> s;
map<int, int> mp;
void paint(int l, int r, int val){
auto it1 = s.upper_bound({l, (int)1e9, (int)1e9});
it1--;
auto it2 = s.upper_bound({r, (int)1e9, (int)1e9});
it2--;
vector<array<int, 3>> add, del;
auto it = it1;
while(true){
if(it1 == it){
if((*it1)[0] < l) add.push_back({(*it1)[0], l - 1, (*it1)[2]});
}
if(it2 == it){
if((*it2)[1] > r) add.push_back({r + 1, (*it2)[1], (*it2)[2]});
}
del.push_back(*it);
it++;
if(it == s.end() || it == next(it2)) break;
}
add.push_back({l, r, val});
for(auto [x, y, time]: del){
if(time != -1e18) mp[val - time] += min(r, y) - max(x, l) + 1;
s.erase({x, y, time});
}
for(auto c: add) s.insert(c);
}
void solve(){
int n, m, q; cin >> n >> m >> q;
s.insert({1, n, (int)-1e18});
int cur = 0;
for(int i = 1; i <= m; i++){
int l, r; cin >> l >> r;
paint(l, r, (cur + 1) - l);
cur += (r - l + 1);
}
vector<pair<int, int>> v;
for(auto [x, y]: mp) v.push_back({x, y});
vector<int> suf(v.size() + 1);
for(int i = v.size() - 1; i >= 0; i--) suf[i] = suf[i + 1] + v[i].second;
while(q--){
int k; cin >> k;
cout << suf[upper_bound(v.begin(), v.end(), pair<int, int>{k, 1e18}) - v.begin()] << " ";
}
cout << "\n";
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
}
| # | 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... |