Pagini recente » Cod sursa (job #882188) | Cod sursa (job #2185793) | Cod sursa (job #1445977) | Cod sursa (job #542245) | Cod sursa (job #2538955)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100009], d[100009], t[100009];
int n, m, i, st, dr, mid, k;
void afis( int x ){
if ( t[x] ) afis( t[x] );
g<<v[x]<<" ";
}
int main()
{
f>>n;
for ( i = 1; i <= n; i++ )
f>>v[i];
d[++k] = 1;
for ( i = 2; i <= n; i++ ){
st = 1; dr = k;
while ( st <= dr ){
mid = st+(dr-st)/2;
if ( v[i] <= v[d[mid]] )
dr = mid-1;
else st = mid+1;
}
if ( st > k ) d[++k] = i;
else d[st] = i;
t[i] = d[st-1];
}
g<<k<<"\n";
afis (d[k]);
return 0;
}