Cod sursa(job #2643803)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 21 august 2020 17:11:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int v[100001], poz[100001], o[100001];

int main()
{
    int n, i, k, p, u, mij, max1, aux, x, t, t1;
    bool ok;

    fin>>n;

    for(i=1; i<=n; i++)
    {
        fin>>v[i];
    }

    k=1;
    o[k]=v[1];
    t1=1;
    poz[1]=1;

    for(i=2; i<=n; i++)
    {
        p=1;
        u=k;

        if(v[i]<o[1]) t=1;

        else if(v[i]>o[k])
        {
            k++;
            t=k;
            t1=i;
            x=v[i];
        }

        else while(p<=u)
        {
            mij=(p+u)/2;

            if(v[i]<=o[mij])
            {
                t=mij;
                u=mij-1;

            }

            else
            {
                p=mij+1;
            }

            /*if(v[i]<=o[mij] && v[i]>o[mij-1]) ok=1;
            else
            {
                if(v[i]>=o[mij]) p=mij+1;
                else u=mij-1;
            }*/
        }

        o[t]=v[i];
        poz[i]=t;
        //cout<<"poz["<<i<<"]= "<<poz[i]<<"\n";
    }

    fout<<k<<"\n";
    //for(i=1; i<=n; i++)
    //{
    //    cout<<poz[i]<<' ';
    //}


    max1=k-1;

    k=1;
    o[k]=v[t1];
    aux=v[t1];

    for(i=t1-1; i>=1 && max1>0; i--)
    {
        if(v[i]<aux && poz[i]==max1)
        {
            k++;
            o[k]=v[i];

            max1--;
            aux=v[i];
        }
    }

    for(i=k; i>=1; i--)
    {
        fout<<o[i]<<' ';
    }

}