(七)、区间合并
https://www.acwing.com/problem/content/805/
一、题干


二、代码
AC代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; //1、排序 //2、从左到右遍历 typedef pair<int,int> PTT; int n; vector<PTT> segs; void merge(){ vector <PTT> res; int l = -2e9,r = -2e9; // 维护区间 for(auto seg : segs){ if(r < seg.first){ if(l!=-2e9) res.push_back({l,r}); // 去除第一次 l = seg.first,r = seg.second; }else r = max(r,seg.second); } if(l != -2e9) res.push_back({l,r}); // 特判全为一个区间 cout<<res.size()<<endl; } int main(){ scanf("%d",&n); for(int i =0;i<n;i++){ int l,r; scanf("%d%d",&l,&r); segs.push_back({l,r}); } sort(segs.begin(),segs.end()); // Sort 对 pair 排序的时候,先排pair左边的元素,后排pair后面的元素 merge(); return 0; }

浙公网安备 33010602011771号