Pagini recente » Cod sursa (job #1412759) | Cod sursa (job #2704757) | Cod sursa (job #1425157) | Cod sursa (job #2379219) | Cod sursa (job #2885501)
#include <stdio.h>
#include <ctype.h>
#define MAX_N 100000
int v[MAX_N], dp[MAX_N + 1], prev[MAX_N], rasp[MAX_N];
int main() {
FILE *fin, *fout;
int n, maxLen, len, m, p, st, dr, mij, i;
fin = fopen( "scmax.in", "r" );
fscanf( fin, "%d", &n );
maxLen = 0;
dp[0] = -1;
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v[i] );
st = 0;
dr = maxLen + 1;
while ( dr - st > 1 ) {
mij = (st + dr) / 2;
if ( v[dp[mij]] < v[i] )
st = mij;
else
dr = mij;
}
len = st + 1;
prev[i] = dp[st];
if ( len > maxLen ) {
maxLen = len;
dp[len] = i;
}
else {
if ( v[i] < v[dp[len]] )
dp[len] = i;
}
}
fclose( fin );
fout = fopen( "scmax.out", "w" );
fprintf( fout, "%d\n", maxLen );
m = 0;
p = dp[maxLen];
while ( p != -1 ) {
rasp[m] = v[p];
m++;
p = prev[p];
}
for ( i = m - 1; i >= 0; i-- )
fprintf( fout, "%d ", rasp[i] );
fclose( fout );
return 0;
}