Cod sursa(job #2519264)

Utilizator rafaelrafyChitan Rafael rafaelrafy Data 7 ianuarie 2020 14:44:24
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <iostream>
using namespace std;
int n,i,s[100100],leg[100100],l[100100],a[100100],pozs[100100],k,st,dr,m,lmax,pozitia;
int main(int argc, const char * argv[]) {
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    for(i=n;i>=1;i--)
    {
        if(a[i]<s[k]||k==0)
        {
            s[++k]=a[i];
            pozs[k]=i;
            l[i]=k;
            leg[i]=pozs[k-1];
        }
        else
        {
            st=1;
            dr=k;
            while(st<=dr)
            {
                m=(st+dr)/2;
                if(s[m]>a[i])
                    st=m+1;
                else dr=m-1;
            }
            s[st]=a[i];
            pozs[st]=i;
            l[i]=st;
            leg[i]=pozs[st-1];
        }
    }
    for(i=1;i<=n;i++)
        if(l[i]>lmax)
            lmax=l[i],pozitia=i;
    g<<lmax<<endl;
    while(pozitia)
    {
        g<<a[pozitia]<<' ';
        pozitia=leg[pozitia];
    }
    return 0;
}