Submission #1249749

#TimeUsernameProblemLanguageResultExecution timeMemory
1249749mr_finCurtains (NOI23_curtains)C++20
9 / 100
1595 ms2100 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int,int>; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, q; cin >> n >> m >> q; vector<pii> curtains(m); for(int i = 0; i < m; i++){ cin >> curtains[i].first >> curtains[i].second; } // 1) Sắp xếp theo l tăng dần sort(curtains.begin(), curtains.end()); while(q--){ int s, e; cin >> s >> e; // 2) Tìm vị trí đầu tiên có l_i >= s int idx = int(lower_bound(curtains.begin(), curtains.end(), make_pair(s, -1)) - curtains.begin()); // max-heap chứa các r_i của curtains đã "đủ điều kiện" để mở rộng cur priority_queue<int> heap; int cur = s; bool ok = true; // 3) Greedy: mỗi bước lấy màn có r lớn nhất trong những màn có l <= cur while(cur <= e){ // Đưa vào heap tất cả curtains[idx] có l <= cur while(idx < m && curtains[idx].first <= cur){ if(curtains[idx].second <= e) heap.push(curtains[idx].second); idx++; } // Nếu không có màn nào mở rộng được, thất bại if(heap.empty() || heap.top() < cur){ ok = false; break; } // Lấy màn mở rộng xa nhất, gạt sang bên phải int bestR = heap.top(); heap.pop(); cur = bestR + 1; } cout << (ok ? "YES\n" : "NO\n"); } return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...