Cod sursa(job #2394392)

Utilizator bluestorm57Vasile T bluestorm57 Data 1 aprilie 2019 16:41:52
Problema Subsir 2 Scor 45
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream f("subsir2.in");
ofstream g("subsir2.out");

int n,v[5005];
int best[5005],poz[5005],l[5005],pos,nr;

int caut(int x){
    int li=0;
    int ls=nr;
    int mij=(li+ls)/2;

    while(li<=ls){
        if(v[l[mij]]<x && v[l[mij+1]]>=x) return mij;
        if(v[l[mij+1]]<x){
            li=mij+1;
            mij=(li+ls)/2;
        }else{
            ls=mij-1;
            mij=(li+ls)/2;
        }

    }
    return nr;

}

int main(){
    int i;
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];

    nr=1;
    best[1]=1;
    l[1]=1;
    for(i=2; i<=n; i++){
        pos=caut(v[i]);
        poz[i]=l[pos];
        best[i]=pos+1;
        l[pos+1]=i;

        nr=max(nr,pos+1);
    }

    int maxim=0;
    for(i=1; i<=n; i++)
        maxim=max(maxim,best[i]);

    g<<maxim<<"\n";

    for(i=1; i<=maxim; i++)
        g<<l[i]<<" ";
    //for(i=1; i<=n; i++)
      //  g<<l[i]<<" ";

    return 0;
}