Cod sursa(job #2310747)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 1 ianuarie 2019 22:41:21
Problema Subsir 2 Scor 18
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;
int v[5005];
int l[5005];
int dp[5005];
int main()
{
    freopen("subsir2.in","r",stdin);
    freopen("subsir2.out","w",stdout);
    int n,i,j,k,st,dr;
    scanf("%d",&n);
    for(i=n;i>=1;i--)scanf("%d",&v[i]);
    int cnt=0;
    int m1=0;
    l[1]=100000-v[1];
    dp[1]=1;
    cnt=1;
    m1=1;
    for(i=1;i<=n;i++)v[i]=100000-v[i];
    for(i=2;i<=n;i++)
    {
        if(v[i]>=l[cnt])
        {
            dp[i]=++cnt;
            l[cnt]=v[i];
            if(cnt>m1)m1=cnt;
            continue;
        }
        int st=1,dr=cnt;
        while(st<=dr)
        {
            int med=(st+dr)/2;
            if(v[i]>=l[st])st=med+1;
            else
                dr=med-1;
        }
        l[st]=v[i];
        dp[i]=st;
        cnt=st;
    }
    printf("%d\n",m1);
    return 0;
}