제출 #1317432

#제출 시각아이디문제언어결과실행 시간메모리
1317432namhhInspections (NOI23_inspections)C++20
100 / 100
941 ms41844 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second const int N = 2e5+5; int n,m,q,l,r,ans[N]; map<int,int>mp; set<tuple<int,int,int>>st; vector<pii>loj; pii qr[N]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> q; int sum = 0; for(int i = 1; i <= m; i++){ cin >> l >> r; if(st.empty()){ st.insert({l,r,sum}); sum += r-l+1; continue; } auto x = st.lower_bound({l,-1,-1}); if(x != st.begin()) --x; vector<tuple<int,int,int,int>>dm; while(x != st.end()){ auto [l1,r1,t] = *x; if(r < l1) break; if(r1 < l){ ++x; continue; } if(l <= l1 && r1 <= r){ int vc = sum+l1-l+1; mp[vc-t-2] += r1-l1+1; dm.push_back({l1,r1,t,-1}); ++x; } else if(l <= l1 && r < r1){ int vc = sum+l1-l+1; dm.push_back({l1,r1,t,-1}); mp[vc-t-2] += r-l1+1; dm.push_back({r+1,r1,t+r-l1+1,1}); break; } else if(l1 < l && r1 <= r){ int vc = t+l-l1; dm.push_back({l1,r1,t,-1}); dm.push_back({l1,l-1,t,1}); mp[sum-vc-1] += r1-l+1; ++x; } else{ int vc = t+l-l1; mp[sum-vc-1] += r-l+1; dm.push_back({l1,r1,t,-1}); dm.push_back({l1,l-1,t,1}); dm.push_back({r+1,r1,t+(r+1)-l1,1}); break; } } st.insert({l,r,sum}); sum += r-l+1; for(auto[l1,r1,t,type]: dm){ if(type == 1) st.insert({l1,r1,t}); else st.erase({l1,r1,t}); } } sum = 0; for(auto it = mp.rbegin(); it != mp.rend(); ++it){ mp[it->fi] += sum; sum = it->se; } for(auto it: mp) loj.push_back(it); loj.push_back({1e17,0}); loj.push_back({1e18,0}); int ptr = 0; for(int i = 1; i <= q; i++){ cin >> qr[i].fi; qr[i].se = i; } sort(qr+1,qr+q+1); for(int i = 1; i <= q; i++){ while(qr[i].fi > loj[ptr].fi) ptr++; ans[qr[i].se] = loj[ptr].se; } for(int i = 1; i <= q; i++) cout << ans[i] << " "; }
#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...