http://train.usaco.org/usacoprob2?S=milk2&a=GXRmdeaXtbb
思考:数组大小一定要开够
/*
ID: emaguo1
PROG: milk2
LANG: C++11
*/
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <map>
#include <cstdio>
#include <algorithm>
using namespace std;
struct time{
int t;
bool beleft;
time(int tt, bool bb) : t(tt), beleft(bb) {}
time() {}
}Time[10050];
int cmp(struct time a, struct time b)
{
if (a.t == b.t) {
if (a.beleft == true) return 1;
else return 0;
}
return a.t < b.t;
}
int main() {
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
memset (Time, 0, sizeof(Time));
int n, lmilkt = 0, lrelaxt = 0, tmilkt = 0, flag = 0;
scanf ("%d", &n);
int num = 0;
for (int i = 0; i < n; i++) {
int Begin, End;
scanf ("%d%d", &Begin, &End);
Time[num].t = Begin;
Time[num++].beleft = true;
Time[num].t = End;
Time[num++].beleft = false;
}
sort (Time, Time + num, cmp);
//printf ("%d %d\n", Time[0].t, Time[0].beleft);
flag = 1;
for (int i = 1; i < num; i++) {
//printf ("%d %d\n", Time[i].t, Time[i].beleft);
if (flag == 0) {
lrelaxt = max (lrelaxt, Time[i].t - Time[i - 1].t);
lmilkt = max (lmilkt, tmilkt);
tmilkt = 0;
} else {
tmilkt += Time[i].t - Time[i - 1].t;
lmilkt = max (lmilkt, tmilkt);
}
if (Time[i].beleft) flag++;
else flag--;
}
printf ("%d %d\n", lmilkt, lrelaxt);
return 0;
}