Cod sursa(job #2766388)

Utilizator bibiancapitu2004Pitu Bianca bibiancapitu2004 Data 1 august 2021 09:57:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <cstdio>
#include <fstream>

using namespace std;

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

const int NMAX = 100000;
int v[NMAX + 5],x[NMAX + 5],t[NMAX + 5],sol[NMAX + 5];


int main()
{
    int n, i, k, p, st, dr, mid, l;
    bool ok;
    in >> n;
    for(i=1;i<=n;i++)
        in >> v[i];

    l=0;
    x[0]=-1;

    for(i=1;i<=n;i++)
    {
        st=1;dr=l;ok=0;
        while(st<=dr)
        {
            mid=(st+dr)/2;
            if(v[x[mid]] > v[i])
                dr=mid-1;
            else
                if(v[x[mid]] < v[i])
                    st=mid+1;
            else{
                    ok=1;
                    break;
                }
        }

        if(!ok)
        {
            if(st == l+1)
            {
                l++;
                x[l]=i;
                t[i]=x[l-1];
            }
            else
                if(st==1)
                {
                    x[st]=i;
                    t[i]=-1;
                }
                else
                {
                    x[st]=i;
                    t[i]=x[st-1];
                }
        }
    }
    out << l <<"\n";
    for(p = x[l]; p != -1; p = t[p])
    {
        k++;
        sol[k]=v[p];
    }
    while(k)
    {
        out << sol[k] <<" ";
        k--;
    }
    return 0;
}