Cod sursa(job #2485876)

Utilizator bubukiki10Cristian Cutitei bubukiki10 Data 2 noiembrie 2019 10:24:24
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100005],p[100005],y[100005],m=1,lgmax,pozmax;
int bs(int x, int st,int dr)
{
    if(st==dr)
        return st;
    int mij=(st+dr)/2;
    if(x==p[mij])
        return mij;
    if(x>p[mij])
        return bs(x,mij,dr);
    else
        return bs(x,st,mij);

}

void rezolvare()
{
    p[0]=a[0];
    for(int i=1;i<n;i++)
    {
        int poz;
        if(a[i]>p[m-1])
        {
            poz=m;
            m++;
        }
        else
            poz=cautbin(a[i],0,m-1);
        p[poz]=a[i];
        y[i]=poz;
        if(poz>lgmax)
        {
            lgmax=poz;
            pozmax=i;
        }
    }
}

void afisare()
{
    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();
    }
}

int main()
{
    int n;
    fin>>n;
    for(int i=0;i<n;i++)
        fin>>a[i];

        rezolvare();
        afisare();
    return 0;
}