Advertisement
DuongNhi99

LIS - Dãy con tăng dài nhất (Sol 1)

Nov 23rd, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. //LIS - Dãy con tăng dài nhất
  2. #include <bits/stdc++.h>
  3. #define int64_t long long
  4. using namespace std;
  5.  
  6. const int N = 1e5 + 5;
  7.  
  8. int n;
  9. int a[N];
  10.  
  11. int cache[N];
  12. int sizer, b[N];
  13.  
  14. void DP() {
  15.    for(int i = 1; i <= n; i++) {
  16.       cache[i] = lower_bound(b + 1, b + sizer + 1, a[i]) - b;
  17.       sizer = max(sizer, cache[i]);
  18.       b[cache[i]] = a[i];
  19.    }
  20. }
  21.  
  22. void Xuat() {
  23.    cout << sizer << '\n';
  24.  
  25.    vector<int> ans;
  26.  
  27.    for(int i = n; i >= 1; i--) {
  28.       if(cache[i] == sizer) {
  29.          ans.push_back(a[i]);
  30.          sizer--;
  31.       }
  32.    }
  33.  
  34.    for(int i = ans.size() - 1; i >= 0; i--)
  35.       cout << ans[i] << ' ';
  36. }
  37.  
  38. int main() {
  39. #ifdef LOCAL
  40.    freopen("in.txt", "r", stdin);
  41. #else
  42.    freopen("LIS.inp", "r", stdin);
  43.    freopen("LIS.out", "w", stdout);
  44. #endif
  45.    ios_base::sync_with_stdio(false);
  46.    cin.tie(0); cout.tie(0);
  47.  
  48.    cin >> n;
  49.    for (int i = 1; i <= n; i++)
  50.       cin >> a[i];
  51.  
  52.    DP();
  53.    Xuat();
  54.  
  55.    return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement