Advertisement
paranid5

2_VSHE

Apr 17th, 2021
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. template<class F, class S, class T>class triple
  6. {
  7. public:
  8.  
  9.     F first;
  10.     S second;
  11.     T third;
  12.  
  13.     triple() = default;
  14.     ~triple() = default;
  15.  
  16.     triple(const F& f, const S& s, const T& t) : first(f), second(s), third(t) {}
  17.  
  18.     triple& operator=(const triple<F, S, T>& p)
  19.     {
  20.         first = p.first;
  21.         second = p.second;
  22.         third = p.third;
  23.         return *this;
  24.     }
  25. };
  26.  
  27. int main()
  28. {
  29.     int n = 0;
  30.     std::scanf("%d", &n);
  31.  
  32.     std::vector<triple<int, int, int>> time(n);
  33.  
  34.     for (int i = 0; i < n; i++)
  35.     {
  36.         time[i].first = i;
  37.         std::scanf("%d%d", &time[i].second, &time[i].third);
  38.     }
  39.  
  40.     std::sort(time.begin(), time.end(), [](
  41.         const triple<int, int, int>& f,
  42.         const triple<int, int, int>& s
  43.         ) { return f.second < s.second; }
  44.     );
  45.  
  46.     int cur_day = time.front().second;
  47.  
  48.     std::vector<std::pair<int, int>> ans(n);
  49.  
  50.     for (const auto& [ind, start, finish ] : time)
  51.     {
  52.         ans[ind] = cur_day > finish ? std::make_pair(-1, -1) : std::make_pair(std::max(start, cur_day), finish);
  53.         cur_day = cur_day == finish ? cur_day + 1 : std::max(cur_day, finish);
  54.     }
  55.  
  56.     std::for_each(
  57.         ans.begin(),
  58.         ans.end(),
  59.         [](const std::pair<int, int>& p) { std::printf("%d %d\n", p.first, p.second); }
  60.     );
  61.  
  62.     return 0;
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement