Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define ld long double
  7. #define rep(i, a, b) for(ll i = a; i < b; i++)
  8. #define vll vector<ll>
  9. #define vvll vector<vector<ll> >
  10. #define pll pair<ll, ll>
  11. #define endl "\n"
  12. #define pb push_back
  13. #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  14.  
  15. bool operator <(const pll a, const pll b) {
  16. return a.first < b.first;
  17. }
  18.  
  19. #define val first
  20. #define in second
  21. #define pred second
  22.  
  23. int main() {
  24.  
  25. ll n;
  26. cin >> n;
  27. vector<pll> a(n);
  28. rep(i, 0, n) {
  29. cin >> a[i].val;
  30. a[i].pred = -1;
  31. }
  32.  
  33. vector<pll> d(n + 1, {(ll)2e9, -1});
  34. d[0].val = -2e9;
  35.  
  36. rep(i, 0, n) {
  37. ll j = (ll)(upper_bound(d.begin(), d.end(), a[i]) - d.begin());
  38. //cout << i << " " << j << endl;
  39. if(d[j - 1].val < a[i].val) {
  40. d[j].val = a[i].val;
  41. d[j].in = i;
  42. a[i].pred = d[j - 1].in;
  43. }
  44. }
  45. ll st = n;
  46. while(d[st].val == 2e9) st--;
  47.  
  48. vll ans;
  49. st = d[st].in;
  50. ans.pb(a[st].val);
  51. while(a[st].pred != -1) {
  52. st = a[st].pred;
  53. ans.pb(a[st].val);
  54. }
  55. cout << ans.size() << endl;
  56. reverse(ans.begin(), ans.end());
  57. for(auto i : ans) {
  58. cout << i << " ";
  59. }
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement