Pagini recente » Cod sursa (job #2463026) | Cod sursa (job #2624220) | Cod sursa (job #1070117) | Cod sursa (job #317200) | Cod sursa (job #2572539)
#include <fstream>
#define N 100001
using namespace std;
ifstream f ( "scmax.in" );
ofstream g ( "scmax.out" );
int a[N], v[N], k, n, i, len[N], tata[N], Max, x, l, sol[N];
int cautbin ( int x ){
int st = 1, dr = k, sol = k + 1;
while ( st <= dr ){
int mid = ( st + dr ) / 2;
if ( v[a[mid]] >= x ){
sol = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
return sol;
}
int main()
{ f >> n;
for ( i = 1; i <= n; i++ ){
f >> v[i];
int poz = cautbin ( v[i] );
k = max ( k, poz );
a[poz] = i;
len[i] = poz;
tata[i] = a[poz - 1];
}
for ( i = 1; i <= n; i++ )
if ( Max < len[i] ){
Max = len[i];
x = i;
}
g << Max << '\n';
while ( x != 0 ){
sol[++l] = v[x];
x = tata[x];
}
for ( i = l; i >= 1; i-- )
g << sol[i] << ' ';
return 0;
}