給定n個任務,每個任務都有開始時間和結束時間,問要同時有多少臺機器才能完成工作...
開始以爲直接排序用優先隊列就好了沒想到WA了,當時想到了一些BUG...萬一結束時間晚的那個開始時間太早,每次找出來最小的結束來做任務會有BUG...
然後考慮到任務看做線段來言,這個就是找出來一個點最多被覆蓋多少次,那麼這個題就成了某場BC的題目。
有個姿勢就是線段拆成兩個端點,遇到起點+1,終點-1,找出來過程最大的就好了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 50100
using namespace std;
struct node
{
int num,tmp;
}a[N*2];
int cmp(node a,node b)
{
if(a.num==b.num)
return a.tmp>b.tmp;
return a.num<b.num;
}
int main()
{
int t;
scanf("%d",&t);
for(int cas=1; cas<=t; cas++)
{
int n,s,t;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d",&s,&t);
a[i*2].num=s;
a[i*2].tmp=1;
a[i*2+1].num=t;
a[i*2+1].tmp=-1;
}
sort(a,a+n*2,cmp);
int ans=0,tmp=0;
for(int i=0;i<n*2;i++)
{
tmp+=a[i].tmp;
ans=max(ans,tmp);
}
printf("Case %d: %d\n",cas,ans);
}
return 0;
}