Pagini recente » Cod sursa (job #1386843) | Cod sursa (job #2445967) | Cod sursa (job #2144294) | Cod sursa (job #691630) | Cod sursa (job #2181307)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, aux;
int arr[200005];
int d[200005];
int t[200005];
int v[200005], k;
int cautare_binara( int st, int dr, int val )
{
int mid;
while( st <= dr )
{
mid = (st + dr)/2;
if( d[mid] == 0 )
dr = mid - 1;
else
if( d[mid] >= val )
dr = mid - 1;
else
st = mid + 1;
}
return (dr + 1);
}
int st, dr, mid;
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>arr[i];
d[1] = arr[1];
t[1] = -1;
for( int i = 2; i <= n; i++ )
{
aux = cautare_binara( 1, n, arr[i] );
if( aux == 1 )
t[ arr[i] ] = -1;
else
t[ arr[i] ] = d[aux - 1];
d[aux] = arr[i];
}
st = 1;
dr = n;
while( st <= dr )
{
mid = (st + dr)/2;
if( d[mid] > 0 )
st = mid + 1;
else
dr = mid - 1;
}
out<<dr<<"\n";
aux = d[dr];
while( aux != -1 )
{
v[++k] = aux;
aux = t[aux];
}
for( int i = k; i >= 1; i-- )
out<<v[i]<<" ";
return 0;
}