Cod sursa(job #2485891)

Utilizator bubukiki10Cristian Cutitei bubukiki10 Data 2 noiembrie 2019 10:30:40
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
stack <int> s;
int a[100005],p[100005],y[100005],m=1,lgmax,pozmax,n;
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+1,dr);
        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=bs(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()
{

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

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