Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define ld long double
- #define rep(i, a, b) for(ll i = a; i < b; i++)
- #define vll vector<ll>
- #define vvll vector<vector<ll> >
- #define pll pair<ll, ll>
- #define endl "\n"
- #define pb push_back
- #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- bool operator <(const pll a, const pll b) {
- return a.first < b.first;
- }
- #define val first
- #define in second
- #define pred second
- int main() {
- ll n;
- cin >> n;
- vector<pll> a(n);
- rep(i, 0, n) {
- cin >> a[i].val;
- a[i].pred = -1;
- }
- vector<pll> d(n + 1, {(ll)2e9, -1});
- d[0].val = -2e9;
- rep(i, 0, n) {
- ll j = (ll)(upper_bound(d.begin(), d.end(), a[i]) - d.begin());
- //cout << i << " " << j << endl;
- if(d[j - 1].val < a[i].val) {
- d[j].val = a[i].val;
- d[j].in = i;
- a[i].pred = d[j - 1].in;
- }
- }
- ll st = n;
- while(d[st].val == 2e9) st--;
- vll ans;
- st = d[st].in;
- ans.pb(a[st].val);
- while(a[st].pred != -1) {
- st = a[st].pred;
- ans.pb(a[st].val);
- }
- cout << ans.size() << endl;
- reverse(ans.begin(), ans.end());
- for(auto i : ans) {
- cout << i << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement