Cod sursa(job #1661970)

Utilizator dominiciorgandaDominic Iorganda dominiciorganda Data 24 martie 2016 13:04:07
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int f[100005],g[100005],p[100005],x,k,i,m,n,j,ok,poz;
int *p1;
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&x);
    for(k=1;k<=x;k++)
        scanf("%d",&f[k]);
    for(g[1]=f[1],p[1]=1,k=2;k<=x;k++)
    {
        if(f[k]>g[k-1])
        {
            g[k]=f[k];
            p[k]=p[k-1];
        }
        else
        {
            if(f[k]<g[1])
            {
                g[1]=f[k];
                p[k]=1;
            }
            else
            {
                p1=upper_bound(g+1,g+k,f[k]);
                poz=p1-g-1;
                //cout<<poz<<" "<<k<<" "<<f[k]<<endl;
                if(g[poz-1]==f[k])
                    p[k]=poz-1;
                else
                {
                    g[poz]=f[k];
                    p[k]=poz;
                }
            }
        }
    }
    printf("%d\n",p[x]);
    return 0;
}