笔记——最大重叠区间数

来源:互联网 发布:asp获取远程网页数据 编辑:程序博客网 时间:2024/06/10 20:39
#include <stdio.h>
#include <algorithm>
using namespace std;


//x为时间节点,flage标记开始节点为1,结束节点为-1,k(可以省略,题目有给定这个区间有几个时加上)记录这个时间节点有几个
struct node{
    int x,flage,k;};
node e[5000];


bool cmp(node a,node b){
    return a.x<b.x||a.x==b.x&&a.flage<b.flage;//时间节点靠前的先处理,结束时间与开始时间一致时,结束时间先处理,结束的可以腾出空间
}


int main(){
    int n,E;
    while(scanf("%d",&n)&&n){
        
        int s,t,k;
        E=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d %d %d",&s,&t,&k);
            //将区间分为两个端点
            e[E].x=s;
            e[E].k=k;
            e[E++].flage=1;
            e[E].x=t;
            e[E].k=k;
            e[E++].flage=-1;
        }
        
        sort(e,e+E,cmp);
        
        int sum=0,ans=0;
        for(int i=0;i<E;i++){
            sum+=e[i].flage*e[i].k;//flage为正时需要有k个区间重叠,flage为负时,有k个区间不再重叠
            ans=max(ans,sum);//ans记录中间所需的最大区间
        }
        printf("%d\n",ans);
    }
    return 0;
}
原创粉丝点击