Pagini recente » Cod sursa (job #2925339) | Cod sursa (job #1312783) | Cod sursa (job #1785538) | Cod sursa (job #1195213) | Cod sursa (job #1783169)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
FILE *fout;
int l[MAXN], prev[MAXN], v[MAXN];
void print(int poz){
if(poz){
print(prev[poz]);
fprintf(fout, "%d ", v[poz]);
}
}
int main()
{
FILE *fin;
int n, i, lmax, rasp, p;
fin=fopen("scmax.in", "r");
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
fclose(fin);
l[1]=lmax=1;
for(i=2; i<=n; i++){
p=1<<17; rasp=0;
while(p){
if(rasp+p<=lmax && v[l[rasp+p]]<v[i])
rasp+=p;
p>>=1;
}
if(rasp==lmax)
++lmax;
prev[i]=l[rasp];
l[rasp+1]=i;
}
fout=fopen("scmax.out", "w");
fprintf(fout, "%d\n", lmax);
print(l[lmax]);
fprintf(fout, "\n");
fclose(fout);
return 0;
}