Cod sursa(job #3310435)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 13 septembrie 2025 22:43:03
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
//
//  main.cpp
//  Subsir crescator maximal
//
//  Created by Andrada Minca on 13.09.2025.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("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;
    fin>>n;
    v.resize(n+1);
    sc.resize(n);
    int st=0,dr=0;
    sc[0]=n;
    v[n]=0;
    vector<int> sol(n);
    for(int i=0;i<n;i++)
    {
        fin>>v[i];
        int poz=bs(v[i],st,dr);
        if(poz>dr||v[sc[poz]]>v[i])
        {
            sc[poz]=i;
        }
        if(poz>dr)
        {
            dr++;
            sol[dr]=v[i];
            int ind=dr-1;
            while(ind>0&&sol[ind]!=sc[ind]){sol[ind]=v[sc[ind]];ind--;}
        }
    }
    fout<<dr<<'\n';
    for(int i=1;i<=dr;i++)fout<<sol[i]<<" ";
    return 0;
}