Cod sursa(job #3195896)

Utilizator aaagabiTurbinca Gabriel aaagabi Data 22 ianuarie 2024 01:16:53
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int pi[4000005];
string a,b;

int v[100005];
int pozi[100005];
int d[100005];
int len,n;
int cb(int nr)
{
    int l=1,r=len;
    int poz=len+1;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(d[mid]>nr)
        {
            poz=mid;
            r=mid-1;
        }
        else
            l=mid+1;
    }
    return poz;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    len=1;
    d[1]=v[1];
    pozi[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(v[i]>d[len])
        {
            d[++len]=v[i];
            pozi[i]=len;
        }
        else
        {
            int l=1,r=len;
            int poz=1+len;
            while(l<=r)
            {
                int mid=(l+r)/2;
                if(d[mid]>v[i])
                {
                    poz=mid;
                    r=mid-1;
                }
                else
                    l=mid+1;
            }
            d[poz]=v[i];
            pozi[i]=poz;
        }
    }
    fout<<len<<'\n';
    vector <int> ans;
    for(int i=n;i>=1;i--)
    {
        if(pozi[i]==len)
        {
            ans.push_back(v[i]);
            len--;
        }
    }
    len=ans.size();
    for(int i=len-1;i>=0;i--)
        fout<<ans[i]<<' ';
    return 0;
}