AcWing 803. 區間合併
阿新 • • 發佈:2020-07-28
AcWing 803. 區間合併
/*貪心 #include <bits/stdc++.h> using namespace std; const int N=1e6+10; pair<int,int> a[N]; int n,num; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i].first>>a[i].second; sort(a+1,a+1+n); num=n; for(int i=1;i<n;i++) { if(a[i].second>=a[i+1].first) num--; a[i+1].first=a[i].first; a[i+1].second=max(a[i+1].second,a[i].second); } cout<<num; return 0; } */ #include <bits/stdc++.h> using namespace std; const int N=1e6+10; int n; typedef pair<int,int> PII; vector<PII> segs; void merge(vector<PII> &segs){ vector<PII> res; sort(segs.begin(),segs.end()); int st=-2e9,ed=-2e9; for(int i=0;i<n;i++){ if(ed<segs[i].first){ if(st!=-2e9) res.push_back({st,ed}); st=segs[i].first,ed=segs[i].second; } else ed=max(ed,segs[i].second); } if(st!=-2e9) res.push_back({st,ed}); segs=res; } int main(){ cin>>n; for(int i=0;i<n;i++){ int l,r; cin>>l>>r; segs.push_back({l,r}); } merge(segs); cout<<segs.size()<<endl; return 0; }