Pagini recente » Cod sursa (job #835001) | Cod sursa (job #1686992) | Cod sursa (job #1822466) | Cod sursa (job #419792) | Cod sursa (job #2182151)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, f, aux;
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];
f = 1;
t[1] = -1;
for( int i = 2; i <= n; i++ )
{
aux = caut_binar( 1, f, arr[i] );
if( aux == 1 )
t[ arr[i] ] = -1;
else
t[ arr[i] ] = d[aux - 1];
d[aux] = arr[i];
f = max( f, aux );
}
aux = d[f];
while( aux != -1 )
{
v[++k] = aux;
aux = t[aux];
}
out<<f<<"\n";
for( int i = k; i >= 1; i-- )
out<<v[i]<<" ";
return 0;
}