Repository navigation
Expand file tree
/
Copy pathlifeguards.cpp
More file actions
75 lines (73 loc) · 2.09 KB
/
Copy pathlifeguards.cpp
File metadata and controls
75 lines (73 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <fstream>
#include <array>
#include <algorithm>
#include <utility>
using namespace std;
int main(){
ifstream fin("lifeguards.in");
ofstream fout("lifeguards.out");
int N;
array<pair<int, int>, 100000> cows;
fin >> N;
for(int i = 0; i < N; i++){
int a, b;
fin >> a >> b;
cows[i] = make_pair(a, b);
}
sort(cows.begin(), cows.begin() + N);
bool duplicateStart = false;
for(int i = 0; i < N - 1; i++){
if(get<0>(cows[i]) == get<0>(cows[i+1])){
duplicateStart = true;
cows[i] = make_pair(-1, -1);
}
}
int largestEndTime = 0;
int totalTime = 0;
for(int i = 0; i < N; i++){
if(get<0>(cows[i]) == -1)
continue;
int s = get<0>(cows[i]);
int e = get<1>(cows[i]);
if(s <= largestEndTime){
if(e > largestEndTime){
totalTime += e - largestEndTime;
largestEndTime = e;
}else{
duplicateStart = true;
cows[i] = make_pair(-1, -1);
}
}else{
totalTime += e - s;
largestEndTime = e;
}
}
if(duplicateStart){
fout << totalTime << endl;
return 0;
}
largestEndTime = 0;
int minIndividualTime = 1000000000;
bool ree = false;
for(int i = 0; i < N - 1; i++){
int s = get<0>(cows[i]);
int e = get<1>(cows[i]);
if(s >= largestEndTime){
if(e <= get<0>(cows[i+1]))
minIndividualTime = min(e - s, minIndividualTime);
else
minIndividualTime = min(get<0>(cows[i+1]) - s, minIndividualTime);
}else{
if(e <= get<0>(cows[i+1]))
minIndividualTime = min(e - largestEndTime, minIndividualTime);
else
minIndividualTime = min(get<0>(cows[i+1]) - largestEndTime, minIndividualTime);
}
if(minIndividualTime < 0 && !ree)
ree = true;
largestEndTime = e;
}
fout << totalTime - minIndividualTime << endl;
return 0;
}