给定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;
}