Pagini recente » Cod sursa (job #2523765) | Cod sursa (job #1218627) | Cod sursa (job #1447836) | Cod sursa (job #2198356) | Cod sursa (job #253172)
Cod sursa(job #253172)
#include<stdio.h>
#include<algorithm>
#define NMAX 100011
#define INF 1<<30
using namespace std;
int imax,lmax,n,x[NMAX],i,j,t[NMAX],bst[NMAX],v[NMAX];
FILE *g=fopen("scmax.out","w");
int cauta(int X){
int p=1,u=lmax,mij;
while(p <= u){
mij=(p+u)>>1;
if(v[x[mij]] >= X)
u=mij-1;
else
p=mij+1;
}
return u;
}
void af(int i){
i=t[i];
if(i != 0){
af(i);
fprintf(g,"%d ",v[i]);
}
}
int main(){
FILE *f=fopen("scmax.in","r");
fscanf(f,"%d",&n);
for(i=1; i<=n; i++)
fscanf(f,"%d",&v[i]);
for(i=1; i<=n; i++)
x[i] = INF;
x[1]=1;
bst[1]=1;
lmax=1;
for(i=2; i<=n; i++){
bst[i] = cauta(v[i]) + 1;
t[i] = x[bst[i] - 1];
if(bst[i] > lmax){
lmax = bst[i];
imax = i;
}
if(v[x[bst[i]]] > v[i] || x[bst[i]] == INF)
x[bst[i]] = i;
}
fprintf(g,"%d\n",lmax);
af(imax);
fprintf(g,"%d",v[imax]);
fclose(f);
fclose(g);
return 0;
}