Cod sursa(job #1041212)

Utilizator jul123Iulia Duta jul123 Data 25 noiembrie 2013 17:12:51
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<iostream>
#include<cstdio>
#include<fstream>

using namespace std;
ofstream g("scmax.out");

int nr, best[100000], L[100000], v[100000], poz, prec[100000];

int cautare(int x)
{
    long long pas=1<<30;
    int i;
    for (i=0; pas>0; pas>>=1)
            if (i+pas<=nr && v[L[i+pas]]<x)
                i+=pas;
    return i+1;
}
void afisez_recursiv(int x)
{
    if (x!=0)
    {
        afisez_recursiv(prec[x]);
        g<<v[x]<<" ";
    }
}
int main()
{


    FILE *fin;
    fin=fopen("scmax.in","r");
    int n, i;
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; i++)
    {
        fscanf(fin, "%d", &v[i]);
    }
    best[1]=1;
    L[0]=0;
    L[1]=1;
    nr=1;
    for(i=2; i<=n; i++)
    {
        poz=cautare(v[i]);
        prec[i]=L[poz-1];
        best[i]=poz;
        L[poz]=i;
        if(nr<poz)
            nr=poz;
    }
    int maxim=0, pozmax;
    for(i=1; i<=n; i++)
        if(best[i]>maxim)
            {maxim=best[i];
             pozmax=i;
            }
    g<<maxim<<"\n";
    afisez_recursiv(pozmax);
    }