Pagini recente » Cod sursa (job #375694) | Cod sursa (job #1868207) | Cod sursa (job #2594038) | Cod sursa (job #85397) | Cod sursa (job #1742912)
#include<stdio.h>
using namespace std;
FILE *f1=fopen("scmax.in","r");
FILE *f2=fopen("scmax.out","w");
int n,v[100001],poz[100001],sortat[100001],i,L,j,sol[100001];
int detp(int val,int st,int dr){
int mij;
mij=(st+dr)/2;
if (st==dr){
if (dr>L){
L++;
sortat[L]=2000000000;
}
sortat[st]=val;
return st;
}
if (val<sortat[mij]) return detp(val,st,mij);
else
if (val>sortat[mij]) return detp(val,mij+1,dr);
else
return 0;
}
int main(){
fscanf(f1,"%d",&n);L=0;
for (i=1;i<=n;i++){
fscanf(f1,"%d",&v[i]);
poz[i]=detp(v[i],1,L+1);
}
fclose(f1);
fprintf(f2,"%d\n",L);
i=L;j=n;
while(i>0){
while(poz[j]!=i) j--;
sol[i]=v[j];
i--;
}
for (i=1;i<=L;i++)
fprintf(f2,"%d ",sol[i]);
fclose(f2);
return 0;
}