Advertisement
KiK0S

Untitled

Mar 4th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4.  
  5. signed main(){
  6.     //freopen("input.txt", "r", stdin);
  7.     //freopen("output.txt", "w", stdout);
  8.     ios_base::sync_with_stdio(0);
  9.     cin.tie(0);
  10.     cout.tie(0);
  11.     int n, m;
  12.     cin >> m >> n;
  13.     vector<int> start(n), fin(n);
  14.     vector<pair<int,int>> w(m);
  15.     for(int i = 0; i < m; i++){
  16.         cin >> w[i].first >> w[i].second;
  17.         w[i].first--;
  18.         w[i].second--;
  19.         start[w[i].first]++;
  20.         fin[w[i].second]++;
  21.     }
  22.     int cur = 0;
  23.     vector<int> res(n);
  24.     for(int i = 0; i < n; i++){
  25.         cur += start[i];
  26.         res[i] = cur;
  27.         cur -= fin[i];
  28.     }
  29.     /*for(auto it : res) cout << it << ' ';
  30.     cout << '\n';*/
  31.     vector<int> dpl(n, 1e9);
  32.     vector<int> dpr(n, 1e9);
  33.     vector<int> ansl(n);
  34.     vector<int> ansr(n);
  35.     ansl[0] = 1;
  36.     dpl[0] = -1;
  37.     dpl[1] = res[0];
  38.     for(int i = 1; i < n; i++){
  39.         int idl = upper_bound(dpl.begin(), dpl.end(), res[i]) - dpl.begin();
  40.         dpl[idl] = res[i];
  41.         ansl[i] = idl;
  42.     }
  43.     /*for(auto it : dpl) cout << it << ' ';
  44.     cout << '\n';
  45.     for(auto it : ansl) cout << it << ' ';*/
  46.     ansr[n-1] = 1;
  47.     dpr[1] = res[n-1];
  48.     dpr[0] = -1;
  49.     for(int i = n-2; i >= 0; i--){
  50.         int idr = upper_bound(dpr.begin(), dpr.end(), res[i]) - dpr.begin();
  51.         dpr[idr] = res[i];
  52.         ansr[i] = idr;
  53.     }
  54.     /*cout << '\n';
  55.     for(auto it : dpr) cout << it << ' ';
  56.     cout << '\n';
  57.     for(auto it : ansr) cout << it << ' ';*/
  58.     int ans = 0;
  59.     for(int i = 0; i < n; i++){
  60.         ans = max(ans, ansl[i] + ansr[i] - 1);
  61.     }
  62.     cout << ans;
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement