笔记——最大重叠区间数

#include
#include
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 }


int main(){
    int n,E;
    while(scanf("%d",&n)&&n){
        
        int s,t,k;
        E=0;
        for(int i=0;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             sum+=e[i].flage*e[i].k;//flage为正时需要有k个区间重叠,flage为负时,有k个区间不再重叠
            ans=max(ans,sum);//ans记录中间所需的最大区间
        }
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(笔记,贪心)