1. 程式人生 > 其它 >AcWing 905. 區間選點

AcWing 905. 區間選點

題目:給定若干區間,現求出最小點的數量,使得每個區間都至少包含一個選出的點。

分析:貪心,按照區間右端點排序,初始設定一個充分小的右端點,當新的區間左端點大於右端點時說明需要新增新的點,此時答案+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; }