Cod sursa(job #2567029)

Utilizator spartanul300Vasile Andrei spartanul300 Data 3 martie 2020 14:36:52
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

vector <int> sol;
int n,poz,p,u,mij,i,k,valoare,v[100100],L[100100],t[100100];

int main()
{
    f>>n;
    for(i=1;i<=n;i++)f>>v[i];

    k=1;t[k]=v[1];L[1]=1;

    for(i=2;i<=n;i++)
    {
        if(t[k]<v[i])k++,t[k]=v[i],L[i]=k;
        else
        {
            p=1;u=k;poz=-1;
            while(p<=u)
            {
                mij=(p+u)/2;
                if(t[mij]>=v[i])poz=mij,u=mij-1;
                else p=mij+1;
            }

            if(poz!=-1){t[poz]=v[i];L[i]=poz;}
        }
    }

    g<<k<<'\n';
    valoare=INT_MAX;

    for(i=n;i>=1;i--)
    {
        if(L[i]==k && v[i]<valoare)
        {
            sol.push_back(v[i]);
            k--;
            valoare=v[i];
        }
    }

    while(!sol.empty())g<<sol.back()<<" ",sol.pop_back();
    return 0;
}