Dang_Quan_10_Tin

ROBOT TS10 PTNK 2018-2019

Jan 8th, 2022
980
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #define task "ROBOT"
  2.  
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. using ll = long long;
  11. using ld = long double;
  12.  
  13. constexpr int N = 1e5 + 5;
  14. constexpr int Inf = 1e9 + 7;
  15. int n, l, r, a[N], b[N];
  16. vector<int> cnt, s;
  17.  
  18. void Read()
  19. {
  20.     cin >> n >> l >> r;
  21.  
  22.     // Các vị trí quan trọng cần quan tâm
  23.     s.emplace_back(l);
  24.     s.emplace_back(r);
  25.  
  26.     for (int i = 1; i <= n; ++i)
  27.     {
  28.         cin >> a[i] >> b[i];
  29.  
  30.         // Các vị trí quan trọng cần quan tâm
  31.         s.emplace_back(a[i]);
  32.         s.emplace_back(b[i]);
  33.     }
  34. }
  35.  
  36. #define Find(x, v) (lower_bound(x.begin(), x.end(), v) - x.begin() + 1)
  37.  
  38. void Solve()
  39. {
  40.     // Loại phần tử trùng
  41.     sort(s.begin(), s.end());
  42.     s.resize(unique(s.begin(), s.end()) - s.begin());
  43.  
  44.     // Khởi tạo mảng cnt[]
  45.     cnt.resize(s.size() + 3, 0);
  46.  
  47.     for (int i = 1; i <= n; ++i)
  48.     {
  49.         ++cnt[Find(s, a[i])];
  50.         --cnt[Find(s, b[i])];
  51.     }
  52.  
  53.     vector<int> one;
  54.  
  55.     for (int i = 1; i <= (int)s.size(); ++i)
  56.     {
  57.         cnt[i] += cnt[i - 1];
  58.  
  59.         // Liệt kê các vị trí x mà cnt[x] = 1
  60.         if (cnt[i] == 1)
  61.             one.emplace_back(s[i - 1]);
  62.     }
  63.  
  64.     int ans(0);
  65.  
  66.     for (int i = 1; i <= n; ++i)
  67.     {
  68.         int x = max(l, a[i]),
  69.             y = min(r, b[i]);
  70.  
  71.         // Tìm kiếm nhị phân
  72.  
  73.         if (lower_bound(one.begin(), one.end(), y) - lower_bound(one.begin(), one.end(), x) <= 0) // Có thể điều robot này đi
  74.             ans = max(ans, b[i] - a[i]);
  75.     }
  76.  
  77.     cout << ans;
  78. }
  79.  
  80. int32_t main()
  81. {
  82.     ios::sync_with_stdio(0);
  83.     cin.tie(0);
  84.     cout.tie(0);
  85.     if (fopen(task ".INP", "r"))
  86.     {
  87.         freopen(task ".INP", "r", stdin);
  88.         freopen(task ".OUT", "w", stdout);
  89.     }
  90.     Read();
  91.     Solve();
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment