Pagini recente » Cod sursa (job #442584) | Cod sursa (job #1431636) | Cod sursa (job #2173518) | Cod sursa (job #2503008) | Cod sursa (job #1049490)
#include <fstream>
#define MAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[MAX], best[MAX], prec[MAX], secv[MAX], lsecv, N;
int cautb(int x)
{
int st, dr, m;
st = 0;
dr = lsecv;
m = (st + dr)/2;
while( st <= dr)
{
if( v[ secv[m]] < x ) st = m + 1;
else dr = m - 1;
m = (st + dr) /2;
}
return m;
}
void afis(int poz)
{
if( prec[poz]) afis( prec[poz]);
fout<<v[poz]<<" ";
}
int main()
{
int i;
fin >> N;
for( i = 1; i <= N; i++)
fin >> v[i];
secv[1] = 1;
lsecv = 1;
for( i = 2; i <= N; i++)
{
int poz = cautb(v[i]);
prec[i] = secv[ poz ] ;
secv[ poz + 1] = i;
if( poz == lsecv ) lsecv ++;
}
fout<<lsecv<<"\n";
afis(secv[lsecv]);
return 0;
}