Cod sursa(job #2374525)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 7 martie 2019 19:09:54
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define Dim 100007
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,ans1,V[Dim],Q[Dim],P[Dim],st,dr,cnt;
int L[Dim],k;

int main()
{
    f>>N;
    for(int i=1;i<=N;i++)
    {
        f>>V[i];
        if(!ans1)
        {
            ans1++,Q[ans1]=V[i];
            P[++cnt]=1;
        }
        else
        {
            st=1; dr=ans1;
            int poz=0;
            bool ok=0;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                if(V[i]>Q[mij]) st=mij+1;
                else
                {
                   ok=1;
                   poz=mij;
                   dr=mij-1;
                }
            }
            if(ok==0)
            {
                ans1++;
                Q[ans1]=V[i];
                P[++cnt]=ans1;
            }else
            {
                Q[poz]=V[i];
                P[++cnt]=poz;
            }
        }
    }
    g<<ans1<<'\n';
    for(int i=cnt;i>=1&&ans1>0;i--)
    if(P[i]==ans1)
    {
        ans1--;
        L[++k]=i;
    }
    for(int i=k;i>=1;i--) g<<V[L[i]]<<" ";
    return 0;
}