Samkit5025

Untitled

Jul 13th, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct cmp
  5. {
  6.     bool operator()(pair<int, int> &a, pair<int, int> &b)
  7.     {
  8.         return a.second > b.second;
  9.     }
  10. };
  11.  
  12. bool check(vector<pair<int, int>> &a, int m, int n, int mid)
  13. {
  14.  
  15.     priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
  16.  
  17.     int workerIdx = 0;
  18.     int i = 1;
  19.  
  20.     while (i < n)
  21.     {
  22.         while (true)
  23.         {
  24.             if (workerIdx == m)
  25.                 break;
  26.             if (a[workerIdx].first > i)
  27.             {
  28.                 break;
  29.             }
  30.             else if (a[workerIdx].first <= i && a[workerIdx].second > i)
  31.             {
  32.                 pq.push(a[workerIdx]);
  33.                 workerIdx++;
  34.             }
  35.             else
  36.             {
  37.                 workerIdx++;
  38.             }
  39.         }
  40.  
  41.         while (true)
  42.         {
  43.             if (pq.size() == 0)
  44.                 return false;
  45.             auto topRange = pq.top();
  46.             pq.pop();
  47.  
  48.             if (topRange.second <= i)
  49.             {
  50.                 continue;
  51.             }
  52.             i = min(topRange.second, i + mid);
  53.             break;
  54.         }
  55.     }
  56.  
  57.     return true;
  58. }
  59.  
  60. int minimumTime(int N, int M, vector<pair<int, int>> &Range)
  61. {
  62.     sort(Range.begin(), Range.end());
  63.  
  64.     int start = 0;
  65.     int end = N;
  66.     int ans = -1;
  67.  
  68.     while (start <= end)
  69.     {
  70.         int mid = (start + end) / 2;
  71.         if (check(Range, M, N, mid))
  72.         {
  73.             ans = mid;
  74.             end = mid - 1;
  75.         }
  76.         else
  77.         {
  78.             start = mid + 1;
  79.         }
  80.     }
  81.     return ans;
  82. }
  83.  
  84. int main()
  85. {
  86.     int N, M;
  87.     cin >> N >> M;
  88.  
  89.     vector<pair<int, int>> Range(M);
  90.     for (int i = 0; i < M; i++)
  91.     {
  92.         cin >> Range[i].first >> Range[i].second;
  93.     }
  94.     cout<<minimumTime(N,M,Range)<<endl;
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment