Cod sursa(job #2246767)

Utilizator rares1012Rares Cautis rares1012 Data 27 septembrie 2018 15:32:33
Problema Subsir crescator maximal Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <stdlib.h>

int afis[100000][2];
int lung[100001];
int v[100000];

int max;

int cautb(int k){
    int r,p;
    r=0;
    p=1<<16;
    while(p>0){
        if(r+p<=max && afis[lung[r+p]][0]<k)
            r+=p;
        p/=2;
    }
    return r;
}

int main()
{
    int n,i,j,poz;
    FILE*fi,*fo;
    fi=fopen("scmax.in","r");
    fo=fopen("scmax.out","w");
    fscanf(fi,"%d",&n);
    lung[0]=-1;
    for(i=0;i<n;i++){
        fscanf(fi,"%d",&afis[i][0]);
        j=cautb(afis[i][0]);
        afis[i][1]=lung[j];
        lung[j+1]=i;
        if(j+1>max)
            max=j+1;
    }
    poz=lung[max];
    for(i=0;i<max;i++)
        {
            v[max-i-1]=afis[poz][0];
            poz=afis[poz][1];
        }
    fprintf(fo,"%d\n",max);
    for(i=0;i<max;i++)
        {
            fprintf(fo,"%d ",v[i]);
        }
    fclose(fi);
    fclose(fo);
    return 0;
}