Cod sursa(job #2072973)

Utilizator IsacLucianIsac Lucian IsacLucian Data 22 noiembrie 2017 15:48:48
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

int k,dp[100002],n,a[100002],poz[100002],aux[100002];

int Caut_bin(int x)
{
    int st,dr,mij,p;
    st=1;
    dr=p=k;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(dp[mij]>=x)
        {
            p=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
   return p;
}

int main()
{
    int i,x;

    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];

    k=1;
    dp[k]=a[1];
    poz[1]=1;
    for(i=2;i<=n;i++)
    {
        if(a[i]>dp[k])
        {
            dp[++k]=a[i];
            poz[i]=k;
        }
        else if(a[i]<=dp[1])
        {
            dp[1]=a[i];
            poz[i]=1;
        }
        else
        {
            x=Caut_bin(a[i]);
            dp[x]=a[i];
            poz[i]=x;
        }
    }

    fout<<k<<"\n";
    x=k;
    for(i=n;i>=1 && x>0;i--)
        if(poz[i]==x)
        {
            aux[x]=a[i];
            x--;
        }

    for(i=1;i<=k;i++)
        fout<<aux[i]<<" ";
    return 0;
}