Pagini recente » Cod sursa (job #3154774) | Cod sursa (job #1369681) | Cod sursa (job #2622725) | Cod sursa (job #2138837) | Cod sursa (job #763460)
Cod sursa(job #763460)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAX 100001
int n,v[MAX],b[MAX],c[MAX],k;
int bsearch(int l,int r,int x){
int m;
while(l<r)
{
m = (l+r)/2;
if(c[m] >= x)r = m; else l = m + 1;
}
c[r] = x;
if(r > k)k = r;
return r;
}
void tipar(int x){
for(int i=x;i>0;i--)
if(v[i] == c[k])
{
k--;
tipar(i-1);
printf("%d ",v[i]);
return;
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=n;i++)
b[i]=bsearch(1,k+1,v[i]);
// for(int i=1;i<=n;i++)printf("%d ",b[i]);
printf("%d\n",k);
tipar(n);
return 0;
}