基础算法——区间合并
题目给定n个区间[li,ri]要求合并所有有交集的区间。注意如果在端点处相交也算有交集。输出合并完成后的区间个数。例如[1,3]和[2,6]可以合并为一个区间[1,6]。输入格式第一行包含整数n。接下来n行每行包含两个整数l和r。输出格式共一行包含一个整数表示合并区间完成后的区间个数。数据范围1≤n≤100000,−1e9≤li≤ri≤1e9#include bits/stdc.h using namespace std; const int N100010; typedef pairint,int PII; int n,l,r; vectorPII arr; void merge(vectorPII arr) { vectorPII brr; int st-INT_MAX; int ed-INT_MAX; sort(arr.begin(),arr.end());//按照左端点排序 for(auto t:arr) { if(edt.first)//当前找到的区间右端点小于下一个区间的左端点说明找到了一组新的区间 { if(st!-INT_MAX) brr.push_back({st,ed});//只要不是初始情况 stt.first,edt.second; } else edmax(ed,t.second); } //处理最后一组情况 if(st!-INT_MAX) brr.push_back({st,ed}); arrbrr; } int main() { cinn; for(int i0;in;i) { cinlr; arr.push_back({l,r}); } merge(arr); coutarr.size()endl; return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2548310.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!