Pagini recente » Cod sursa (job #989190) | Cod sursa (job #2392682) | Cod sursa (job #1195496) | Cod sursa (job #1037816) | Cod sursa (job #750687)
Cod sursa(job #750687)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
#define TEST 0
void open_file(){
if(TEST)
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
} else
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
}
}
int v[100001],c[100001],bst[100001],n,k;
int caut_binar(int l, int r,int x){
int md;
while(l < r)
{
md = (l+r)/2;
if( c[md] >= x ) r = md; else l = md + 1;
}
if( r > k )k = r;
return r;
}
void tipar(int x,int p){
for(int i=p; i>=0; i--)
if( bst[i] == x && x > 0 )
{
tipar( x-1,i );
printf("%d ",v[i]);
return ;
}
}
int main(){
int p;
open_file();
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=n;i++)
{
p = caut_binar( 1, k+1, v[i] );
c[p] = v[i];
bst[i] = p;
}
// for(int i=1;i<=n;i++)printf("%d ",bst[i]);
printf("%d\n",k);
tipar( k,n );
return 0;
}