Cod sursa(job #2795244)

Utilizator rARES_4Popa Rares rARES_4 Data 6 noiembrie 2021 10:03:13
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int n,x,l_sir = 1;
int v[100001],v_final[100001],poz_in_v_final[100001];
int cb(int x)
{
    int st = 1,dr = l_sir,mij,ans = l_sir+1;
    while(st<=dr)
    {
        mij = (st+dr)/2;
        if(v_final[mij]>=x)
        {
            ans = mij;
            dr = mij-1;
        }
        else if (v_final[mij]<x)
            st = mij+1;
    }
    return ans;
}
void afisare(int cnt,int x)
{
    if(cnt==0)
        return;
    for(int i = x;i>=0;i--)
    {
        if(poz_in_v_final[i]==cnt)
            {
                afisare(cnt-1,x-1);
                g << v[i]<< " ";
                return;
            }
    }
}
int main()
{
    f >> n;
    f >> v[1];
    v_final[1] = v[1];
    poz_in_v_final[1] = 1;
    for(int i = 2;i<=n;i++)
    {
        f >> v[i];
        int poz = cb(v[i]);
        v_final[poz] = v[i];
        poz_in_v_final[i] = poz;
        l_sir = max(l_sir,poz);
    }
    g <<l_sir<<'\n';
    afisare(l_sir,n);
}