思路:
脑抽了,一看题目,这不就是线段树么,离散化区间合并。。最终发现我并不会写。。。于是看了下题目范围10^6。。。模拟水之。。每个区间左端点+1,右端点-1,从左到右扫一下就行了。。。
代码:
/*
ID:xu baoqi
LANG:C++
TASK:milk2
*/ #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <set>
using namespace std; #define N 1000005 int a[N];
int n; main()
{
// freopen("milk2.in","r",stdin);
// freopen("milk2.out","w",stdout);
int i, j, k;
scanf("%d",&n);
memset(a,,sizeof(a));
int len=;
int minh=;
for(i=;i<n;i++){
scanf("%d %d",&j,&k);
len=max(len,k);
minh=min(j,minh);
a[j]++;a[k]--;
}
for(i=minh+;i<=len;i++) a[i]+=a[i-]; int ans1, ans2;
j=k=;
ans1=ans2=;
for(i=minh;i<=len;i++){
if(a[i]){
j++;if(k)ans2=max(ans2,k);k=;
}
else{
k++;if(j)ans1=max(ans1,j);j=;
}
}
printf("%d %d\n",ans1,ans2);
}