Cod sursa(job #2280003)

Utilizator elenaisaiaElena Isaia elenaisaia Data 10 noiembrie 2018 10:56:49
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <stack>

using namespace std;

int n,a[100003],x[100003],m=1,y[100003],lgmax,pozmax;
stack<int>s;

int cautare(int st,int dr,int nr)
{
    if(st==dr)
        return st;
    int mij=(st+dr)/2;
    if(nr==x[mij])
        return mij;
    if(nr>x[mij])
        return cautare(mij+1,dr,nr);
    return cautare(st,mij-1,nr);
}

int main()
{
    ifstream fin("scmax.in");
    fin>>n;
    for(int i=0;i<n;i++)
        fin>>a[i];
    x[0]=a[0];
    for(int i=1;i<n;i++)
    {
        int poz;
        if(a[i]>x[m-1])
        {
            x[m]=a[i];
            poz=m;
            m++;
        }
        else
            poz=cautare(0,m-1,a[i]);
        y[i]=poz;
        x[poz]=a[i];
        if(poz>lgmax)
        {
            lgmax=poz;
            pozmax=i;
        }
    }
    ofstream fout("scmax.out");
    fout<<lgmax+1<<"\n";
    for(int i=pozmax;i>=0,lgmax>=0;i--)
        if(y[i]==lgmax)
        {
            lgmax--;
            s.push(a[i]);
        }
    while(!s.empty())
    {
        fout<<s.top()<<" ";
        s.pop();
    }
    return 0;
}