fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class Interval{
  5. public:
  6. int startTime;
  7. int endTime;
  8.  
  9. Interval(int s, int e) {
  10. startTime = s;
  11. endTime = e;
  12. }
  13. };
  14.  
  15. struct myCmp{
  16. bool operator()(Interval a, Interval b){
  17. return a.startTime < b.startTime;
  18. }
  19. };
  20.  
  21. vector<Interval> atleastOnePipelineRunnng(vector<Interval> input) {
  22. vector<Interval> ans;
  23.  
  24. sort(input.begin(), input.end(), myCmp()); // sort on basis of start time
  25.  
  26. int start = input[0].startTime;
  27. int end = input[0].endTime;
  28.  
  29. for(int i=1;i<input.size();i++){
  30. if(input[i].startTime > end) {
  31. ans.push_back(Interval(start, end));
  32.  
  33. start = input[i].startTime;
  34. end = input[i].endTime;
  35.  
  36. } else {
  37. end = input[i].endTime;
  38. }
  39. }
  40.  
  41. ans.push_back(Interval(start, end)); // Imp : enter last entry
  42.  
  43.  
  44. return ans;
  45. }
  46.  
  47. int main(){
  48.  
  49. vector<Interval> input;
  50. input.push_back(Interval(2, 5));
  51. input.push_back(Interval(12, 15));
  52. input.push_back(Interval(4, 8));
  53.  
  54.  
  55. // Assumption - input is valid i.e startTime is less then endtime always
  56. vector<Interval> ans = atleastOnePipelineRunnng(input);
  57. for(int i=0;i<ans.size();i++){
  58. cout<<ans[i].startTime<<" "<<ans[i].endTime<<endl;
  59. }
  60.  
  61.  
  62. return 0;
  63. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
2 8
12 15