Cod sursa(job #2975333)

Utilizator MihiBluBalau Mihai MihiBlu Data 6 februarie 2023 11:13:40
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
using namespace std;

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

int n, lg;
int v[100001], d[100001], p[100001], a[100001];

int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>v[i];
    d[++lg]=v[1];
    p[1]=1;
    for(int i=2; i<=n; i++)
    {
        if(d[lg] <= v[i])
            d[++lg]=v[i], p[i]=lg;
        else
        {
            int st=1, dr=lg;
            int val=lg+1;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                if(d[mij]>v[i])
                    val=mij, dr=mij-1;
                else
                    st=mij+1;
            }
            d[val]=v[i];
            p[i]=val;
        }
    }
    g<<lg<<'\n';
    int j=n;
    for(int i=lg; i>0; i--)
    {
        while(p[j] != i)
            j--;
        a[i]=j;
    }
    for(int i=1; i<=lg; i++)
        g<<a[i]<<" ";

}