MAGCARI

TOI19 Range

Jun 26th, 2023
628
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct A{
  4.     int l,r,id;
  5.     bool operator < (const A&o) const{
  6.         if(l!=o.l)  return l>o.l;
  7.         else        return r<o.r;
  8.     }
  9. };
  10. vector<A > mountains;
  11. int LIS[400010];
  12. int ans[400010];
  13. int main(){
  14.     cin.tie(0)->sync_with_stdio(0);
  15.     cin.exceptions(cin.failbit);
  16.     int n;
  17.     cin >> n;
  18.     for(int i=1;i<=n;i++){
  19.         int l,r;
  20.         cin >> l >> r;
  21.         mountains.push_back({l,r,i});
  22.     }
  23.     sort(mountains.begin(),mountains.end());
  24.     int mx = 0;
  25.     for(int i=0;i<n;i++){
  26.         int idx = upper_bound(LIS,LIS+mx,mountains[i].r)-LIS;
  27.         if(idx == mx)   mx++;
  28.         ans[mountains[i].id] = idx+1;
  29.         LIS[idx] = mountains[i].r;
  30.     }
  31.     cout << mx << '\n';
  32.     for(int i=1;i<=n;i++)
  33.         cout << ans[i] << ' ';
  34.     return 0;
  35. }
  36.  
Advertisement
Add Comment
Please, Sign In to add comment