Cod sursa(job #2198779)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 25 aprilie 2018 13:20:02
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int k,n,i,sol[100001],v[100001],p[100001],poz,mid,l[100001],x;
int binar (int st,int dr){
   st=1;dr=k;
   int poz=0;
        while(st<=dr){
            mid=(st+dr)/2;
            if(v[mid]>=v[i]){
                poz=mid;
                dr=mid-1;
            }
            else
                st=mid+1;
        }
    if(poz==0)
        return st;
    return poz;
}
int main()
{   f>>n;k=0;
    for(i=1;i<=n;i++){
        f>>v[i];
        if(k==0){
            l[++k]=i;
            p[1]=0;
        }
        else{
            poz=binar(1,k);
                l[poz]=i;
                p[i]=p[poz];
                k=max(k,poz);
        }
    }
    g<<k<<'\n';
    n=k;
    sol[k]=v[l[k]];
    x=p[l[k]];
    k--;
    while(x!=0){
        sol[k]=v[x];
        x=p[x];
    }
    for(i=1;i<=n;i++)
        g<<sol[i]<<' ';
    return 0;
}