Cod sursa(job #2519079)

Utilizator mihnea401Zamfir Mihnea mihnea401 Data 7 ianuarie 2020 11:13:10
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int k,n,v[100001],i,poz,st,dr,mid,x[100001],l[100001],lg,m,ult,sol[100001],maxim;
int main()
{
    k=0;//lungime subsir maximal
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i],maxim=max(maxim,v[i]);
    for(i=1;i<=n;i++)
    {
        st=1;dr=k;
        poz=k+1;
        while(st<=dr)
        {
            mid=(st+dr)/2;
            if(v[i]>x[mid])
                st=mid+1;
            else
            {
                poz=mid;
                dr=mid-1;
            }
        }
        x[poz]=v[i];
        l[i]=poz;
        if(poz==k+1)
            k++;
    }
    g<<k<<"\n";
    lg=k;
    i=n;
    m=0;
    ult=maxim;
    while(lg>0)
    {
        if(l[i]==lg&&v[i]<=ult)
        {
            m++;
            sol[m]=v[i];
            lg--;
            ult=v[i];
        }
        i=i-1;
    }
    for(i=m;i>=1;i--)
        g<<sol[i]<<" ";
    f.close();
    g.close();
    return 0;
}