Pagini recente » Cod sursa (job #1887635) | Cod sursa (job #1475989) | Cod sursa (job #393966) | Cod sursa (job #1469229) | Cod sursa (job #2565404)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100100], t[100100], d[100100];
int n, i, st, dr, mid, k;
void afis ( int poz ){
if ( t[poz] )
afis( t[poz] );
g<<v[poz]<<" ";
}
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)>>1);
if ( v[d[mid]] >= v[i] )
dr = mid-1;
else st = mid+1;
}
if ( st > k ) k++;
t[i] = d[st-1];
d[st] = i;
}
g<<k<<"\n";
afis(d[k]);
return 0;
}