Cod sursa(job #2275013)

Utilizator RedXtreme45Catalin RedXtreme45 Data 2 noiembrie 2018 19:14:53
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda alexei1 Marime 1.47 kb
#include <fstream>

using namespace std;
int v[100000],q[100000],p[100000];
int cautare(int p,int u,int x,int q[],int OK)
{
    while (p<u)
    {
        int m=(p+u)/2;
        if (x>q[m])
        {
            p=m+1;
            OK=-1;
        }
        if (x<q[m])
        {
            u=m-1;
            OK=1;
        }
        if (x==q[m])
        {
            return m;
        }
    }
    if (OK==-1)
        return p;
    else
        return u+1;
}
int main()
{
    int n,i,j;
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    fin>>n;
    for (i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    q[1]=v[1];
    p[1]=1;
    int u=1;
    for (i=2; i<=n; i++)
    {
       if (u==1)
        {
            if (v[i]>q[u])
            {
                u++;
                q[u]=v[i];
                p[i]=u;
            }
            else
            {
                q[u]=v[i];
                p[i]=1;
            }
        }
        else
        {
            if (v[i]<=q[u] && v[i]>=q[1])
            {
                int x=cautare(1,u,v[i],q,1);
                q[x]=v[i];
                p[i]=x;
            }
            if (v[i]>q[u])
            {
                u++;
                q[u]=v[i];
                p[i]=u;
            }
            if (v[i]<q[1])
            {
                q[1]=v[i];
                p[i]=1;
            }

        }
    }
    fout<<u<<"\n";

    return 0;
}