USACO1.2 Milking Cows(milk2)

        按照开始时间升序排序,然后从左到右扫一遍,记录一个当前区间[tmp_first , tmp_second] 。如果下一组数据的first比tmp_second小或与之相等,则是连接起来的,检查这组数据的second,取max(second , tmp_second)。 如果下一组数据的first比tmp_second的大,则是相互断开的,整理本区间,ans1取max(tmp_second-tmp_first,ans1)。ans2取m(first-tmp_second,ans2)。

 

/*
ID:jzzlee1
PROG:milk2
LANG:C++
*/
#include <fstream>
#include <string>
#include<iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
struct node
{
	int first, second;
	bool operator<(const node &r) const
	{
		return first < r.first;
	}
}a[5000];
ifstream fin("milk2.in");
ofstream fout("milk2.out");
int max(int a,int b)
{
	return a>b?a:b;
}
int main()
{
	int n;
	fin>>n;
	for (int i = 0; i < n; ++i)
		fin>>a[i].first>>a[i].second;
	sort(a, a+n);
	int beg = a[0].first, end = a[0].second,ans1=0, ans2=0;
	for (int i=1; ;++i)
	{
		for(;i<n&&a[i].first<=end;++i)
			if (a[i].second>end)
				end=a[i].second;
		ans1=max(ans1,end-beg);
		if (i==n) break;
		ans2=max(ans2,a[i].first-end);
		beg=a[i].first; end=a[i].second;
	}
	fout<<ans1<<" "<<ans2<<endl;
	return 0;
}

 

你可能感兴趣的:(USACO)