Pagini recente » Cod sursa (job #868796) | Cod sursa (job #2893861) | Cod sursa (job #2944499) | Cod sursa (job #2301019) | Cod sursa (job #2182203)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, u, aux, p_ant;
int arr[100005], d[100005], t[100005];
int v[100005], k;
int caut_binar( int st, int dr, int val )
{
int mid;
while( st <= dr )
{
mid = (st + dr)/2;
if( d[mid] < val )
st = mid + 1;
else
dr = mid - 1;
}
return st;
}
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>arr[i];
d[1] = arr[1];
u = 1;
t[1] = -1;
p_ant = 1;
for( int i = 2; i <= n; i++ )
{
aux = caut_binar( 1, u, arr[i] );
if( aux == 1 )
t[i] = -1, p_ant = i;
else
t[i] = p_ant;
d[aux] = arr[i];
if( u < aux )
{
u = aux;
p_ant = i;
}
}
for( int i = 1; i <= n; i++ )
if( arr[i] == d[u] )
{
aux = i;
break;
}
while( aux != -1 )
{
v[++k] = arr[aux];
aux = t[aux];
}
out<<u<<"\n";
for( int i = k; i >= 1; i-- )
out<<v[i]<<" ";
return 0;
}