Pagini recente » Cod sursa (job #12444) | Cod sursa (job #758072) | Cod sursa (job #576728) | Cod sursa (job #9431) | Cod sursa (job #1952048)
#include <stdio.h>
using namespace std;
FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");
int s[100001],v[100001],c[100001];
int caut(int p, int u, int x){
int m;
while (p<=u){
m=(p+u)/2;
if (x==v[s[m]]) return m;
if (x<v[s[m]]) u=m-1;
else p=m+1;
}
return p;
}
int main()
{
int n,nr=0,p,u=0,i;
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
p=caut(1,nr,v[i]);
s[p]=i;
c[i]=s[p-1];
if (p>nr){
nr=p;
u=i;
}
}
fprintf(g,"%d\n",nr);
i=0;
while (true){
i++;
s[i]=v[u];
u=c[u];
if (u==0) break;
}
for (nr=i;nr>=1;nr--) fprintf(g,"%d ",s[nr]);
fclose(f);
fclose(g);
return 0;
}