Cod sursa(job #1662018)

Utilizator dominiciorgandaDominic Iorganda dominiciorganda Data 24 martie 2016 13:37:41
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 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,ct;
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,j=2;k<=x;k++)
    {
        if(f[k]>g[j-1])
        {
            g[j]=f[k];
            p[k]=j;
            j++;
        }
        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;
                //cout<<poz<<" "<<k<<" "<<f[k]<<endl;
                if(g[poz-1]==f[k])
                    p[k]=poz-1;
                else
                {
                    if(g[poz]==f[k])
                        p[k]=p[poz];
                    else
                    {
                        g[poz]=f[k];
                        p[k]=poz;
                    }
                }
            }
        }
        /*for(i=1,ct=0;i<=k;i++)
            cout<<g[i]<<" ";
        cout<<endl;
        for(i=1,ct=0;i<=k;i++)
            cout<<p[i]<<" ";
    */}
    for(k=1,ct=0;k<=x;k++)
        ct=max(ct,p[k]);
    printf("%d\n",ct);
    return 0;
}