Cod sursa(job #1561360)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 3 ianuarie 2016 23:21:03
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define ValN 100005

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int N, i, v[ValN];
int be, en, mid, x, mx;
int dp[ValN], inv[ValN];

int main()
{
    fin >> N;
    for (i=1; i<=N; i++)
    {
        fin >> v[i];
        inv[i]=2000000000;
    }
    for (i=1; i<=N; i++)
    {
        be=1;
        en=i-1;
        x=0;
        while (be<=en)
        {
            mid=(be+en) / 2;
            if (inv[mid]>=v[i])
              en=mid-1;
            else
            {
                be=mid+1;
                x=max(x, mid);
            }
            mid=(be+en) / 2;
        }
        dp[i]=max(dp[i], x+1);
        mx=max(dp[i], mx);
        inv[dp[i]]=min(inv[dp[i]], v[i]);
    }
    fout << mx;
    fin.close();
    fout.close();
    return 0;
}