Submission
Status:
[P-SSSSSSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: kittipos
Problemset: วันว่างๆ
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-09 18:13:41
#include <bits/stdc++.h>
using namespace std;
int main() {
set<pair<int, int>> time; // starttime and endtime
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int m;
cin >> m;
for (int j = 0; j < m; j++) {
int a, b;
cin >> a >> b;
// conflict is chuck where
// its starttime or endtime is somewhat from a to b
// search conflict chuck by starttime
auto conflict = time.upper_bound({a, 0});
// continue delete conflict if its starttime
while (conflict != time.end() && (*conflict).first >= a && (*conflict).first <= b) {
a = min(a, (*conflict).first);
b = max(b, (*conflict).second);
auto to_erase = conflict;
conflict++;
time.erase(to_erase);
}
time.insert({a, b});
}
}
if (time.size() <= 1) {
cout << -1;
return 0;
}
int cnt = 0;
for (pair<int, int> i: time) {
if (cnt == 0) {
cout << i.second << ' ';
} else if (cnt+1 == time.size()) {
cout << i.first;
} else {
cout << i.first << ' ' << i.second << ' ';
}
cnt++;
}
}