Pagini recente » Cod sursa (job #2794519) | Cod sursa (job #2462312) | Cod sursa (job #1560755) | Cod sursa (job #1570415) | Cod sursa (job #2457827)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, l, b[100005], v[100005], m[100005], i, bn, k, aux;
fin >> n;
l = b[0] = v[0] = m[0] = bn = 0;
for(i = 1; i <= n; ++i) {
fin >> v[i];
l = 0; k = bn;
while(l <= k) {
aux = (l + k) / 2;
if(v[b[aux]] < v[i]) l = aux + 1;
else if(v[b[aux]] > v[i]) k = aux - 1;
else break;
}
if(l <= k) continue;
b[l] = i;
m[i] = l;
if(bn < l) {
bn = l;
}
}
(fout << bn).put('\n');
for(i = n, l = bn; i > 0; --i)
if(m[i] == l)
{ b[l] = v[i]; break; }
for(--l; i > 0 && l; --i)
if(m[i] == l && v[i] < b[l+1])
{ b[l] = v[i]; --l; }
for(i = 1; i <= bn; ++i)
(fout << b[i]).put(' ');
}