Cod sursa(job #3344262)

Utilizator Dascalu_LucaDascalu Luca Petru Dascalu_Luca Data 1 martie 2026 19:18:16
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sclm.in");
ofstream fout("sclm.out");

int A[1005],n,d[1005],k,P[1005];

void citire(){
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>A[i];
    }
}

int BinarySearch(int x){
    int st=1,dr=k,mij,poz=k;
    while(st<=dr){
        mij=(st+dr)/2;
        if(A[d[mij]]>=x){
            dr=mij-1;
            poz=mij;

        }
        else{
            st=mij+1;
        }
    }
    return poz;
}

int sclm(){
    d[++k]=1;
    P[1]=0;
    for(int i=2;i<=n;i++){
        if(A[d[k]]<=A[i]){
            P[i]=d[k];
            d[++k]=i;
        }
        else{
            int de_inlocuit=BinarySearch(A[i]);
            P[i]=d[de_inlocuit-1];
            d[de_inlocuit]=i;
        }
    }
    return k;
}

int main()
{
    citire();
    int k=sclm();
    fout<<k<<"\n";
    deque<int> dq;
    int p=d[k];
    while(p!=0){
        dq.push_front(p);
        p=P[p];
    }
    while(!dq.empty()){
        int Front=dq.front();
        dq.pop_front();
        fout<<Front<<" ";
    }
    return 0;
}