Cod sursa(job #2982081)

Utilizator bitza1247Stanciu-Tivlea Valentin Gabriel bitza1247 Data 19 februarie 2023 15:16:00
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,k,i,j,p,st,dr,mij,A[100005],D[100005],P[100005],I[100005];

int main()
{
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>A[i];
    }
    k=1;
    D[1]=A[1];
    P[1]=1;
    for(i=2; i<=n; i++)
    {
        if(A[i]>D[k])
        {
            k++;
            D[k]=A[i];
            P[i]=k;
        }
        else
        {
            st=1;
            dr=k;
            p=k+1;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(D[mij]>A[i])
                {
                    p=mij;
                    dr=mij-1;
                }
                else
                {
                    st=mij+1;
                }
            }
            D[p]=A[i];
            P[i]=p;
        }
    }
    j=n;
    for(i=k; i>=1; i--)
    {
        while(P[j]!=i)
        {
            j--;
        }
        I[i]=j;
    }
    g<<k<<'\n';
    for(i=1; i<=k; i++)
    {
        g<<I[i]<<' ';
    }
    return 0;
}