Pagini recente » Cod sursa (job #2440900) | Cod sursa (job #170128) | Cod sursa (job #1171909) | Cod sursa (job #1484709) | Cod sursa (job #2049971)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN=100001;
int v[MAXN],poz[MAXN],rez[MAXN],recon[MAXN];
int cauta(int li, int ls, int x){
int mij;
while(li<=ls){
mij=(li+ls)/2;
if(poz[mij]==x)
return mij;
else if(poz[mij]>x)
ls=mij-1;
else
li=mij+1;
}
return li;
}
int main()
{
FILE *fin, *fout;
int n,i,x,pun;
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
fscanf(fin,"%d\n%d ",&n,&v[1]);
poz[1]=v[1];
pun=1;
for(i=2;i<=n;i++){
fscanf(fin,"%d",&v[i]);
x=cauta(1,pun,v[i]);
poz[x]=v[i];
rez[x]=i;
recon[i]=rez[x-1];
pun=pun>x?pun:x;
}
i=rez[pun];
x=pun;
fprintf(fout,"%d\n",pun);
while(i){
poz[pun]=v[i];
pun--;
i=recon[i];
}
for(i=1;i<=x;i++)
fprintf(fout,"%d ",poz[i]);
fclose(fin);
fclose(fout);
return 0;
}