Cod sursa(job #2121309)

Utilizator lorena1999Marginean Lorena lorena1999 Data 3 februarie 2018 15:51:09
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int sol[100001];
int n,  v[100001], l[100001], p[100001];

void read()
    {
        f>>n;
        for(int i=1; i<=n; i++)
            f>>v[i];
    }

int cautare_binara(int st, int dr, int nr)
    {
        int mij = (st+dr)/2;
        if(st==dr)
            return st;
        if(nr<=l[mij])
            cautare_binara(st, mij, nr);
        else
            cautare_binara(mij+1, dr, nr);
    }

void secv()
    {
        l[0]=0;
        int ls, ld;
        ls=ld=0;
        for(int i=1; i<=n; i++)
        {
            if(v[i]>l[ld])
            {
                ld++;
                l[ld]=v[i];
                p[i]=ld;
            }
            else
            {
                int rez = cautare_binara(ls, ld, v[i]);
                l[rez]=v[i];
                p[i]=rez;
            }

        }
        g<<ld<<"\n";
        int i=n;
        int cld=ld;
        while(ld)
        {
            if(p[i]==ld)
                {
                    sol[ld]=v[i];
                    ld--;
                }
            i--;
        }
        for(int i=1; i<=cld; i++)
            g<<sol[i]<<" ";
    }

int main()
{
    read();
    secv();
    return 0;
}