Cod sursa(job #2574500)

Utilizator anamariatoaderAna Toader anamariatoader Data 5 martie 2020 23:00:34
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");

int n,v[100005],i,k,a[100005],sol[100005],tata[100005];

int cautbinar(int x){
    int st=1,dr=k,sol=0;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[a[mij]]>=x){
            sol=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    if(sol==0)
        sol=++k;
    return sol;
}

int main()
{
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
        int p=cautbinar(v[i]);
        a[p]=i;
        tata[i]=a[p-1];
    }
    fout<<k<<'\n';
    int t=a[k];
    for(i=1;i<=k;i++){
        sol[i]=t;
        t=tata[t];
    }
    for(i=k;i>0;i--)
        fout<<v[sol[i]]<<' ';
    return 0;
}