Pagini recente » Cod sursa (job #2738622) | Cod sursa (job #2750467) | Cod sursa (job #3238793) | Cod sursa (job #523139) | Cod sursa (job #2755425)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
ll n, lng[100005], lmax, a[100005], pre[100005];
void print(int x) {
if(pre[x]) print(pre[x]);
fout << a[x] << ' ';
}
int main() {
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
for(int i = 1; i <= n; i++) {
ll l = 0, r = lmax, ans = -1;
while(l <= r) {
ll m = l+(r-l)/2;
if(a[lng[m]] < a[i]) {
ans = m;
l = m+1;
} else {
r = m-1;
}
}
lmax = max(lmax, ans+1);
if(a[lng[ans+1]] > a[i] || lng[ans+1] == 0) {
lng[ans+1] = i;
pre[i] = lng[ans];
}
}
fout << lmax << '\n';
print(lng[lmax]);
}