제출 #1173570

#제출 시각아이디문제언어결과실행 시간메모리
1173570PenguinsAreCuteInspections (NOI23_inspections)C++20
100 / 100
566 ms22880 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, m, q; cin >> n >> m >> q; vector<pair<long long,long long>> ans; set<tuple<int,int,long long>> st; st.insert({1, n, 1LL<<40}); long long time = 0; for(int i=0;i<m;i++) { int l, r; cin >> l >> r; auto it = st.lower_bound(make_tuple(l,0,0)); if(it == st.end() || get<0>(*it) > l) { it--; auto [cl, cr, ct] = (*it); st.erase(it); st.insert({cl,l-1,ct}); st.insert({l,cr,ct}); } it = st.lower_bound(make_tuple(r+1,0,0)); it--; if(get<1>(*it) > r) { auto [cl, cr, ct] = (*it); st.erase(it); st.insert({cl,r,ct}); st.insert({r+1,cr,ct}); } long long cur = time - l; while(1) { it = st.lower_bound(make_tuple(l,0,0)); if(it == st.end() || get<0>(*it) > r) break; auto [cl, cr, ct] = (*it); ans.push_back({cur - ct, cr - cl + 1}); st.erase(it); } st.insert({l,r,cur}); time += (r - l + 1); } sort(ans.begin(),ans.end()); for(int i = int(ans.size());--i;) ans[i-1].second += ans[i].second; while(q--) { long long s; cin >> s; auto it = lower_bound(ans.begin(),ans.end(),make_pair(s+1,0LL)); if(it == ans.end()) cout << "0 "; else cout << it->second << " "; } }
#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...