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:10:19

#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).second <= b) {
                a = min(a, (*conflict).first);
                b = max(b, (*conflict).second);
                auto to_erase = conflict;
                conflict++;

                time.erase(to_erase);
            }
            time.insert({a, b});
        }
    }

    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++;
    }
    

}