Pagini recente » Istoria paginii propuneri/8-almanah | Cod sursa (job #2828614) | Clasament tl2 | Atasamentele paginii Clasament happy-birthday-infoarena-2014 | Cod sursa (job #3298064)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax = 1e5 + 1;
int v[nmax], valMin[nmax], pos[nmax], tati[nmax], len = 0;
int main() {
int n;
fin >> n;
for(int i = 1; i <= n; i++)
fin >> v[i];
for(int i = 1; i <= n; i++)
valMin[i] = 1e9;
for(int i = 1; i <= n; i++)
{
int p = lower_bound(valMin + 1, valMin + n + 1, v[i]) - valMin;
if (valMin[p - 1] < v[i] && v[i] < valMin[p])
{
valMin[p] = v[i];
pos[p] = i;
tati[i] = pos[p - 1];
len = max(len, p);
}
}
fout << len << '\n';
int cur = pos[len];
int sol[nmax], lencur = 0;
while(cur)
{
sol[lencur++] = v[cur];
cur = tati[cur];
}
for (int i = lencur - 1; i >= 0; i--)
fout << sol[i] << ' ';
return 0;
}