Cod sursa(job #2602438)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 16 aprilie 2020 22:04:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

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

int main()
{
    int i,n,nr,p,mij,st,dr,k;
    f>>n;
    for(i=1;i<=n;i++) f>>v[i];
    nr=1;
    rez[1]=v[1];
    poz[1]=1;
    for(i=2;i<=n;i++)
    {
        p=-1;
        st=1;
        dr=nr;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(rez[mij]<v[i]) st=mij+1;
            else
            {
                p=mij;
                dr=mij-1;
            }
        }
        if(p==-1)
        {
            rez[++nr]=v[i];
            poz[i]=nr;
        }
        else
        {
            poz[i]=p;
            rez[p]=v[i];
        }
    }
    g<<nr<<'\n';
    k=0;
    for(i=n;i>=1;i--)
    if(poz[i]==nr)
    {
        k++;
        rez[k]=v[i];
        nr--;
    }
    for(i=k;i>=1;i--) g<<rez[i]<<" ";
    g.close();
    g.close();
    return 0;
}