Cod sursa(job #2241023)

Utilizator YetoAdrian Tonica Yeto Data 14 septembrie 2018 17:03:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;
int n, i, j, k, maxim=-1, poz;
int v[100001], sol[100001], tata[100001], a[100001];
int cautbinar (int k, int x)
{
    int st=1, dr=k;
    while (st<=dr) {
        int mid = (st+dr)/2;
        if (v[a[mid]]>=x)
            dr=mid-1;
        else
            st=mid+1;
    }

    return st;
}

int main () {
    ifstream fin ("scmax.in");
    ofstream fout ("scmax.out");
    fin>>n;
    for (i=1;i<=n;i++) {
        fin>>v[i];
    }
    k=1;a[k]=1;tata[1]=0;
    for (i=2;i<=n;i++) {
       int p=cautbinar(k,v[i]);
        a[p]=i;
        k=max(k,p);
        tata[i]=a[p-1];
        if(p>maxim){
            maxim=p;
            poz=i;
        }

    }


    fout<<maxim<<"\n";
    k=maxim;
    while(k>0){
         sol[k]=v[poz];
         k--;
         poz=tata[poz];
         }
    for (i=1;i<=maxim;i++)
        fout<<sol[i]<<" ";

    return 0;
}