Pagini recente » Cod sursa (job #2941236) | Cod sursa (job #2642857) | Cod sursa (job #2568096) | Cod sursa (job #636402) | Cod sursa (job #2190517)
#include <iostream>
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream f("scmax.in");
ofstream o("scmax.out");
int n, ant[NMAX], val[NMAX], dp[NMAX], l;
void rec(int pos)
{
if(pos)
{
rec(ant[pos]);
o << val[pos] << ' ';
}
}
int main()
{
int st,dr,mij,pos;
f >> n;
f >> val[1];
dp[1] = 1;
ant[1] = 0;
l = 1;
for(int i = 2; i <= n; ++i)
{
f >> val[i];
st = 0;
dr = l;
pos = -1;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(val[dp[mij]] >= val[i])
{
dr = mij - 1;
}
else
{
pos = mij;
st = mij + 1;
}
}
dp[pos+1] = i;
ant[i] = dp[pos];
if(pos+1 > l)
l = pos + 1;
}
o << l << '\n';
rec(dp[l]);
return 0;
}