Cod sursa(job #2736883)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 4 aprilie 2021 09:39:55
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define inf 2000000001
using namespace std;

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

int n,i,t,p,poz,u,mij,pz[100100],v[100100],a[100100];

void recons(int lungime, int pozitie, int ant)
{
    int k;
    if(lungime==0)return;
    for(k=pozitie;k>=1;k--)
    {
        if(v[k]<ant && pz[k]==lungime)
        {
            recons(lungime-1,k,v[pozitie]);
            g<<v[k]<<" ";
            return;
        }
    }
}

int main()
{
    f>>n;
    for(i=1;i<=n;i++)f>>v[i];

    t=1;a[1]=v[1];pz[1]=1;
    for(i=2;i<=n;i++)
    {
        if(v[i]>a[t])t++,a[t]=v[i],pz[i]=t;
        else
        {
            p=1;u=t;poz=0;
            while(p<=u)
            {
                mij=(p+u)/2;
                if(v[i]>a[mij])poz=mij,p=mij+1;
                else u=mij-1;
            }

            a[poz+1]=v[i];
            pz[i]=poz+1;
        }
    }

    g<<t<<'\n';
    recons(t,n,inf);
    return 0;
}