码迷,mamicode.com
首页 > Windows程序 > 详细

区间合并(AcWing.803 )

时间:2020-02-23 09:17:04      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:--   结构体   一个   介绍   span   struct   div   int   while   

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

typedef pair<int, int> PII;

int n;

void merge(vector<PII> &interval)
{
    vector<PII> ans;

    sort(interval.begin(), interval.end()); //! pair排序 优先左端点, 再以右端点排序

    int st = -1e9-10, ed = -1e9-10;  //! 只要比 -1e9 小就可以
    for(auto item:interval)
    {
        if(ed<item.first) //! 第一段区间一定是  ed< item.first
        {
            if(st!=-1e9-10) ans.push_back({st,ed}); //! 第一次在这里初始化
            st = item.first, ed = item.second;//! 第一段区间从这里开始
        }
        else ed = max(ed, item.second);
    }//todo 这个循环结束之后还会剩下一个区间
    if(st!=-1e9-10) ans.push_back({st,ed});  //! 如果不是空的  那我们就加上一段

    interval = ans;
}

int main(void)
{
    ios::sync_with_stdio(false);
    cin >> n;

    vector<PII> interval;
    while(n--)
    {
        int l, r;
        cin >> l >> r;
  
    interval.push_back({l, r});
    }

    merge(interval);

    cout << interval.size() << endl;

    return 0;
}

介绍一种结构体合并区间的算法。

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

const int N = 100010;
struct node{
    int start;
    int end;
}a[N];
int n;

bool cmp(node c,node d){//结构体排序,保证左区间从小到大排序
    return c.start < d.start;
}

int main(){
    scanf("%d",&n);
    for(int i = 0; i < n; i++) scanf("%d%d",&a[i].start,&a[i].end);
    sort(a,a+n,cmp);
    //for(int i = 0; i < n; i++) cout << a[i].start << ‘ ‘ << a[i].end << endl;
    int s = a[0].start,e = a[0].end;
    int ans = 1;//必定有一个区间
    for(int i = 1; i < n; i++){
        if(a[i].start <= e && a[i].end > e) e = a[i].end;//两种情况,有交集
        else if(a[i].start > e) s = a[i].start,e = a[i].end,ans++;//无交集
    }
    cout << ans << endl;
    return 0;
}

 

区间合并(AcWing.803 )

标签:--   结构体   一个   介绍   span   struct   div   int   while   

原文地址:https://www.cnblogs.com/zyz010206/p/12348332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!