Cod sursa(job #2614407)

Utilizator DunareanuDinu Dunareanu Dunareanu Data 11 mai 2020 18:06:28
Problema Subsir crescator maximal Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>

FILE *fin , *fout;

int v[100000],poz[100000],rez[100000],d[100000];

int cb(int st,int dr,int x) {
    int mij,p=0;
    while(st<=dr) {
        mij=(st+dr)/2;
        if(v[poz[mij]]<x) {
            p=mij;
            st=mij+1;
        }
        else {
            dr=mij-1;
        }
    }
    return p;
}

int main() {
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");

    int i,n,nr=0,p,k,l=0;
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++) {
        fscanf(fin,"%d",&v[i]);
    }

    for(i=0;i<n;i++) {
        p=cb(1,l,v[i]);
        if(p+1>l) {
            l=p+1;
        }
        d[i]=p+1;
        poz[d[i]]=i;
        if(d[i]>nr) {
            nr=d[i];
        }
    }

    fprintf(fout,"%d\n",nr);
    k=0;
    for(i=n-1;i>=0;i--) {
        if(nr==d[i]) {
            rez[k]=v[i];
            k++;
            nr--;
        }
    }
    for(i=k-1;i>=0;i--) {
        fprintf(fout,"%d ",rez[i]);
    }
    fprintf(fout,"\n");

    fclose(fin);
    fclose(fout);
    return 0;
}