AcWing 905. 區間選點
阿新 • • 發佈:2021-10-13
題目:給定若干區間,現求出最小點的數量,使得每個區間都至少包含一個選出的點。
分析:貪心,按照區間右端點排序,初始設定一個充分小的右端點,當新的區間左端點大於右端點時說明需要新增新的點,此時答案+1,並更新右端點。
#include <iostream> #include <algorithm> using namespace std; using PII = pair<int, int>; #define x first #define y second const int N = 1e5+10; PII w[N]; int n; int main(void){ int res = 0; cin>>n; //按照區間右端點排序,初始設定一個充分小的右端點,當新的區間左端點大於右端點時說明需要 //新增新的點,此時答案+1,並更新右端點 for(int i=0; i<n; i++)cin>>w[i].first>>w[i].second; sort(w, w+n, [](PII a, PII b){ return a.y<b.y; }); int r = -2e9; for(int i=0; i<n; i++){if(w[i].x>r){ res++; r = w[i].y; } } cout<<res<<endl; return 0; }