#include<bits/stdc++.h>
using namespace std;
class Interval{
public:
int startTime;
int endTime;
Interval(int s, int e) {
startTime = s;
endTime = e;
}
};
struct myCmp{
bool operator()(Interval a, Interval b){
return a.startTime < b.startTime;
}
};
vector<Interval> atleastOnePipelineRunnng(vector<Interval> input) {
vector<Interval> ans;
sort(input.begin(), input.end(), myCmp()); // sort on basis of start time
int start = input[0].startTime;
int end = input[0].endTime;
for(int i=1;i<input.size();i++){
if(input[i].startTime > end) {
ans.push_back(Interval(start, end));
start = input[i].startTime;
end = input[i].endTime;
} else {
end = input[i].endTime;
}
}
ans.push_back(Interval(start, end)); // Imp : enter last entry
return ans;
}
int main(){
vector<Interval> input;
input.push_back(Interval(2, 5));
input.push_back(Interval(12, 15));
input.push_back(Interval(4, 8));
// Assumption - input is valid i.e startTime is less then endtime always
vector<Interval> ans = atleastOnePipelineRunnng(input);
for(int i=0;i<ans.size();i++){
cout<<ans[i].startTime<<" "<<ans[i].endTime<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEludGVydmFsewogICAgcHVibGljOgogICAgaW50IHN0YXJ0VGltZTsKICAgIGludCBlbmRUaW1lOwoKICAgIEludGVydmFsKGludCBzLCBpbnQgZSkgewogICAgICAgIHN0YXJ0VGltZSA9IHM7CiAgICAgICAgZW5kVGltZSA9IGU7CiAgICB9Cn07CgpzdHJ1Y3QgbXlDbXB7CiAgICBib29sIG9wZXJhdG9yKCkoSW50ZXJ2YWwgYSwgSW50ZXJ2YWwgYil7CiAgICAgICAgcmV0dXJuIGEuc3RhcnRUaW1lIDwgYi5zdGFydFRpbWU7CiAgICB9Cn07Cgp2ZWN0b3I8SW50ZXJ2YWw+IGF0bGVhc3RPbmVQaXBlbGluZVJ1bm5uZyh2ZWN0b3I8SW50ZXJ2YWw+IGlucHV0KSB7CiAgICB2ZWN0b3I8SW50ZXJ2YWw+IGFuczsKCiAgICBzb3J0KGlucHV0LmJlZ2luKCksIGlucHV0LmVuZCgpLCBteUNtcCgpKTsgICAgICAgICAvLyBzb3J0IG9uIGJhc2lzIG9mIHN0YXJ0IHRpbWUKCiAgICBpbnQgc3RhcnQgPSBpbnB1dFswXS5zdGFydFRpbWU7CiAgICBpbnQgZW5kID0gaW5wdXRbMF0uZW5kVGltZTsKCiAgICBmb3IoaW50IGk9MTtpPGlucHV0LnNpemUoKTtpKyspewogICAgICAgIGlmKGlucHV0W2ldLnN0YXJ0VGltZSA+IGVuZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGFucy5wdXNoX2JhY2soSW50ZXJ2YWwoc3RhcnQsIGVuZCkpOwoKICAgICAgICAgICBzdGFydCA9IGlucHV0W2ldLnN0YXJ0VGltZTsKICAgICAgICAgICBlbmQgPSBpbnB1dFtpXS5lbmRUaW1lOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbmQgPSBpbnB1dFtpXS5lbmRUaW1lOwogICAgICAgIH0KICAgIH0KCiAgICBhbnMucHVzaF9iYWNrKEludGVydmFsKHN0YXJ0LCBlbmQpKTsgICAgICAvLyBJbXAgOiBlbnRlciBsYXN0IGVudHJ5CgoKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCl7CgogICB2ZWN0b3I8SW50ZXJ2YWw+IGlucHV0OwogICBpbnB1dC5wdXNoX2JhY2soSW50ZXJ2YWwoMiwgNSkpOwogICBpbnB1dC5wdXNoX2JhY2soSW50ZXJ2YWwoMTIsIDE1KSk7CiAgIGlucHV0LnB1c2hfYmFjayhJbnRlcnZhbCg0LCA4KSk7CgoKICAgLy8gQXNzdW1wdGlvbiAtIGlucHV0IGlzIHZhbGlkIGkuZSBzdGFydFRpbWUgaXMgbGVzcyB0aGVuIGVuZHRpbWUgYWx3YXlzCiAgIHZlY3RvcjxJbnRlcnZhbD4gYW5zID0gYXRsZWFzdE9uZVBpcGVsaW5lUnVubm5nKGlucHV0KTsKICAgZm9yKGludCBpPTA7aTxhbnMuc2l6ZSgpO2krKyl7CiAgICAgICBjb3V0PDxhbnNbaV0uc3RhcnRUaW1lPDwiICI8PGFuc1tpXS5lbmRUaW1lPDxlbmRsOwogICB9CgoKICAgIHJldHVybiAwOwp9