Cod sursa(job #3305102)

Utilizator tedicTheodor Ciobanu tedic Data 29 iulie 2025 22:29:32
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;
int v[100005], subsecv[100005], precedent[100005], nr[100005];
vector<int>rasp;
int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i], subsecv[i]=INT_MAX;
        subsecv[n+1]=INT_MAX;
    int maxx=0;
    for(int i=1; i<=n; i++)
    {
        int poz=0;
        for(int k=20; k>=0; k--)
            if(poz+(1<<k)<=n && v[i] > subsecv[poz+(1<<k)])
                poz+=(1<<k);
        poz++; ///in caz ca poz=0
            maxx=max(maxx, poz);
            subsecv[poz]=v[i];
            precedent[poz]=subsecv[poz-1];
    }
    cout<<maxx<<'\n';
    int poz_curr=maxx, nr_curr=subsecv[maxx];
    while(poz_curr!=0)
        rasp.push_back(nr_curr), nr_curr=precedent[poz_curr], poz_curr--;
    reverse(rasp.begin(), rasp.end());
    for(auto x: rasp)
        cout<<x<<" ";
    return 0;
}