Cod sursa(job #1968320)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 17 aprilie 2017 17:00:33
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[Nmax],Q[Nmax],P[Nmax];
int cauta(int val)
{
    int step,best;
    for(step=1; step<=Q[0];step<<=1);
    for(best=0;step;step>>=1)
    {
        if(best+step<=Q[0] && Q[best+step]<val) best+=step;
    }
    return best+1;
}
int main()
{
    int n,i,poz;
    fin>>n;
    for(i=1;i<=n;i++) fin>>v[i];
    for(i=1;i<=n;i++)
    {
        poz=cauta(v[i]);
        if(poz==Q[0]+1)
        {
            Q[0]++;
            Q[Q[0]]=v[i];
            P[i]=Q[0];
        }
        else
        {
            Q[poz]=v[i];
            P[i]=poz;
        }
    }
    fout<<Q[0];
}