Cod sursa(job #2150230)

Utilizator TavinciStefanescu Octavian Tavinci Data 3 martie 2018 12:57:45
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define NRMAX 100005
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n, vec[NRMAX], rez[NRMAX], dreapta=1, parinte[NRMAX], pozRez[NRMAX];

int binar(int st, int dr, int val)
{
    while(dr-st>1)
    {
        int mid=(st+dr)/2;
        if(rez[mid]<val)
        {
            st=mid;
        }
        else
        {
            dr=mid;
        }
    }
    return st;
}


    void afisare(int p)
    {
        if(p!=0)
        {
            afisare(parinte[p]);
            fout<<vec[p]<<" ";
        }
    }

int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>vec[i];
        int k=binar(0,dreapta+1,vec[i]);
        rez[k+1]=vec[i];
        if(k+1>dreapta)
            dreapta++;
        pozRez[k]=i;
        parinte[i]=pozRez[k-1];
    }
    fout<<dreapta-1<<'\n';
    afisare(pozRez[dreapta-1]);
    return 0;
}