Cod sursa(job #3310628)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 15 septembrie 2025 17:20:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
//
//  main.cpp
//  Subsir crescator maximal
//
//  Created by Andrada Minca on 13.09.2025.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
vector<long long> v,sc;
int bs(long long x,int st,int dr)
{
    while(st<dr)
    {
        int mid=(st+dr+1)/2;
        if(x>v[sc[mid]])st=mid;
        else dr=mid-1;
    }
    return dr+1;
}
int main()
{
    int n;
    cin>>n;
    v.resize(n+1);
    sc.resize(n);
    vector<int>prev(n);
    int st=0,dr=0;
    sc[0]=n;
    v[n]=0;
    vector<int> sol;
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
        int poz=bs(v[i],st,dr);
        sc[poz]=i;
        if(poz>dr)
        {
            dr++;
        }
        prev[i]=sc[poz-1];
    }
    cout<<dr<<'\n';
    for(int i=sc[dr];i!=n;i=prev[i])
    {
        sol.push_back(i);
       
    }
    for(int i=dr-1;i>=0;i--)cout<<v[sol[i]]<<" ";
    return 0;
}