Pagini recente » Clasamentul arhivei de probleme | Clasamentul arhivei de probleme | Clasamentul arhivei de probleme | Cei mai harnici utilizatori info-arena | Cod sursa (job #246228)
Cod sursa(job #246228)
#include<stdio.h>
int v[100005],N,x[100005],nr;
int lungime();
int find(int);
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]);
printf("%d",lungime());
return 0;
}
int find(int val){
int p=1,u=nr,mij;
while(p<u){
mij=(p+u)/2;
if(val<=x[mij])
u=mij;
else
p=mij+1;
}
if(x[p]<val)
return p+1;
return p;
}
int lungime(){
nr=0;
x[++nr]=v[1];
for(int i=2;i<=N;++i)
if(v[i]>x[nr])
x[++nr]=v[i];
else
x[find(v[i])]=v[i];
return nr;
}