筆記——最大重疊區間數

#include
#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章