Pagini recente » Cod sursa (job #1880425) | Cod sursa (job #2459769) | Statisticile problemei Trandafiri | Cod sursa (job #2410047) | Cod sursa (job #872022)
Cod sursa(job #872022)
#include<stdio.h>
FILE *fin=fopen("scmax.in","r");
FILE *fout=fopen("scmax.out","w");
int n,v[100010],d[100010],L,i,p,u,m,t[100010];
void drum(int p){
if( t[p] ){
drum(t[p]);
}
fprintf(fout,"%d ",v[p]);
}
int main(){
fscanf(fin,"%d",&n);
fscanf(fin,"%d",&v[1]);
d[1]=1;
L=1;
for(i=2;i<=n;i++){
fscanf(fin,"%d",&v[i]);
p=1;u=L;
while(p<=u){
m=(p+u)/2;
if( v[d[m]] > v[i] && v[d[m-1]] < v[i] ){
d[m]=i;
t[i]=d[m-1];
break;
}
else
if( v[d[m]] > v[i] ){
u=m-1;
}
else{
p=m+1;
}
}
if(p>u && v[i]>v[d[L]] ){
d[++L]=i;
t[i]=d[L-1];
}
}
fprintf(fout,"%d\n",L);
drum(d[L]);
return 0;
}