Pagini recente » Arhiva de probleme | Autentificare | Solutii Summer Challenge, Runda 2 | Cod sursa (job #474764) | Cod sursa (job #2246784)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int v[100001], pozmin[100001], pred[100001];
int cautbin(int nr, int n){
int poz=0, pas=1<<16;
while(pas>0){
if(v[pozmin[poz+pas]]<nr && poz+pas<=n)
poz+=pas;
pas/=2;
}
return poz;
}
void afisare(FILE *fout, int i){
if(pred[i]!=0)
afisare(fout, pred[i]);
fprintf(fout, "%d ", v[i]);
}
int main(){
FILE *fin, *fout;
int n, i, j, m;
fin=fopen("scmax.in", "r");
fout=fopen("scmax.out", "w");
fscanf(fin, "%d", &n);
for(i=1;i<=n;i++)
fscanf(fin, "%d", &v[i]);
m=0;
for(i=1;i<=n;i++){
j=cautbin(v[i], m);
pred[i]=pozmin[j];
pozmin[j+1]=i;
if(j==m)
m++;
}
fprintf(fout, "%d\n", m);
//afisare(fout, pozmin[m]);
fclose(fin);
fclose(fout);
return 0;
}