Cod sursa(job #177549)
| Utilizator | Data | 13 aprilie 2008 11:51:49 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 65 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.47 kb |
#include <stdio.h>
#define N 100001
int x[N],n;
int caut(int z){
int st=1,dr=x[0],m;
while(st<=dr){
m=(st+dr)/2;
if(x[m]==z) return m;
if(x[m]>z) dr=m-1;
else st=m+1;
}
return st;
}
int main(){
int i,z,a;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
z=caut(a);
if(z>x[0]) x[0]++;
x[z]=a;
}
printf("%d\n",x[0]);
for(i=1;i<=x[0];i++)
printf("%d ",x[i]);
}