Cod sursa(job #1952048)

Utilizator mateibanuBanu Matei Costin mateibanu Data 3 aprilie 2017 22:01:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

using namespace std;

FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");

int s[100001],v[100001],c[100001];

int caut(int p, int u, int x){
    int m;
    while (p<=u){
        m=(p+u)/2;
        if (x==v[s[m]]) return m;
        if (x<v[s[m]]) u=m-1;
        else p=m+1;
    }
    return p;
}

int main()
{
    int n,nr=0,p,u=0,i;
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++){
        fscanf(f,"%d",&v[i]);
        p=caut(1,nr,v[i]);
        s[p]=i;
        c[i]=s[p-1];
        if (p>nr){
            nr=p;
            u=i;
        }
    }
    fprintf(g,"%d\n",nr);
    i=0;
    while (true){
       i++;
       s[i]=v[u];
       u=c[u];
       if (u==0) break;
    }
    for (nr=i;nr>=1;nr--) fprintf(g,"%d ",s[nr]);
    fclose(f);
    fclose(g);
    return 0;
}