Pagini recente » Cod sursa (job #1275239) | Cod sursa (job #1797940) | Cod sursa (job #702606) | Cod sursa (job #15964) | Cod sursa (job #1742392)
#include<stdio.h>
using namespace std;
FILE *f1=fopen("scmax.in","r");
FILE *f2=fopen("scmax.out","w");
int n,i,a[100001],aib[100001],maxs,Max,start,val,j,t[100001];
void creare(int i){
int index;
index=i;
aib[i]=val;
index=index+(index&(-index));
while(index<=n){
if (a[i]<a[index]) aib[index]=val;
index=index+(index&(-index));
}
}
void maxim(int i){
int index=i;
while(index>0){
if (maxs<aib[index] && a[i+1]>a[index]) {
maxs=aib[index];
t[i+1]=index;
}
index=index-(index&(-index));
}
}
void afis(int i){
if (t[i]!=0) afis(t[i]);
fprintf(f2,"%d ",a[i]);
}
int main(){
fscanf(f1,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f1,"%d",&a[i]);
fclose(f1);
for (i=1;i<=n;i++){
maxs=0;
maxim(i-1);
val=1+maxs;
if (Max<val){
Max=val;
start=i;
}
creare(i);
}
fprintf(f2,"%d\n",Max);
afis(start);
fclose(f2);
return 0;
}