Cod sursa(job #2664279)

Utilizator metallidethantralayerIon Cojocaru metallidethantralayer Data 28 octombrie 2020 12:14:04
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100005],p[100005],V[100005],h;
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    for(int i=1;i<=n;i++)
    {
        if(v[i]>V[h])
            V[++h]=v[i],p[i]=h;
        else{
            int st=1,dr=h,poz;
            while(st<=dr)
            {
                int mi=(st+dr)>>1;
                if(V[mi]>=v[i])
                    poz=mi,dr=mi-1;
                else st=mi+1;
            }
            V[poz]=v[i],p[i]=poz;
        }
    }
    g<<h<<'\n';
    vector <int> Sol;
    for(int i=n;i>=1;i--)
        if(p[i]==h)
        {
            Sol.push_back(v[i]);
            h--;
        }
    for(int i=Sol.size()-1;i>=0;i--)
        g<<Sol[i]<<' ';
    return 0;
}