Submission #1262536

#TimeUsernameProblemLanguageResultExecution timeMemory
1262536phtungLightning Rod (NOI18_lightningrod)C++20
0 / 100
1107 ms330692 KiB
#include <bits/stdc++.h> using namespace std; #define int long long struct Interval { int L, R, id; }; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<pair<int,int>> b(n); for (int i=0;i<n;i++) cin >> b[i].first >> b[i].second; vector<Interval> seg; for (int i=0;i<n;i++) { int x = b[i].first, y = b[i].second; seg.push_back({x-y, x+y, i}); } sort(seg.begin(), seg.end(), [&](auto a, auto b){ if (a.L != b.L) return a.L < b.L; return a.R > b.R; }); // lọc khoảng bị bao trùm vector<Interval> clean; int bestR = -1e18; for (auto it: seg) { if (it.R > bestR) { clean.push_back(it); bestR = it.R; } } // greedy phủ các tòa int res = 0; int coverR = -1e18; int idx = 0; for (int i=0;i<n;i++) { int x = b[i].first, y = b[i].second; // điểm phải nằm trong ít nhất một khoảng if (x > coverR) { // chọn khoảng trong clean có L <= x và R lớn nhất while (idx+1 < (int)clean.size() && clean[idx+1].L <= x) idx++; coverR = clean[idx].R; res++; } } cout << res << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...