Pagini recente » Cod sursa (job #1549382) | Cod sursa (job #2622964) | Cod sursa (job #807488) | Cod sursa (job #2062672) | Cod sursa (job #2682142)
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define MOD 1000000007
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef double ld;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int a[100010];
vector<int> d(100010, INT_MAX);
int p[100010];
int pos[100010];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
d[0] = INT_MIN;
p[0] = -1;
for (int i = 1; i <= n; i++) {
int j = upper_bound(d.begin(), d.end(), a[i]) - d.begin();
if (d[j - 1] < a[i] && a[i] < d[j]) {
d[j] = a[i];
pos[j] = i;
p[i] = j;
}
}
int ans = 0;
for (int i = 0; i <= n; i++) {
if (d[i] < INT_MAX) {
ans = i;
}
}
fout << ans << "\n";
int last_added = d[ans];
vi sol;
while (ans--) {
sol.pb(last_added);
last_added = d[ans];
}
for (int i = sol.size() - 1; i >= 0; i--) {
fout << sol[i] << " ";
}
return 0;
}