Cod sursa(job #2252139)

Utilizator TeoMiliMilitaru Teodora TeoMili Data 2 octombrie 2018 13:15:21
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;
int l[100001],q[100001],v[100001],sol,so[100001],Max,n,i,k,tata[100001],poz;
int cautare(int x,int k){
    int st,dr,mid,sol;
    st=1;
    dr=k;
    sol=0;
    while(st<=dr){
        mid=(st+dr)/2;
        if(v[q[mid]]>=v[x]){
            sol=mid;
            dr=mid-1;
        }
        else
            st=mid+1;
    }
    if(sol==0)
        return k+1;
    return sol;
}

int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    Max=0;
    k=0;
    for(i=1;i<=n;i++){
        sol=cautare(i,k);
        k=max(k,sol);
        q[k]=i;
        l[i]=k;
        tata[i]=q[k-1];
        }
    cout<<k<<'\n';
    Max=k;
    for(i=n;i>=1;i--)
        if(l[i]==k){
            poz=i;
            break;
        }
    Max=k;
    while(k>0){
        so[k]=v[poz];
        poz=tata[poz];
        k--;
    }
    for(i=1;i<=Max;i++)
        cout<<so[i]<<" ";

    return 0;
}