Cod sursa(job #1561367)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 3 ianuarie 2016 23:30:40
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 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]=x+1;
        mx=max(dp[i], mx);
        inv[dp[i]]=min(inv[dp[i]], v[i]);
    }
    fout << mx << '\n';
    for (i=1; i<=mx; i++)
      fout << inv[i] << " ";
    fin.close();
    fout.close();
    return 0;
}