Cod sursa(job #2431986)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 21 iunie 2019 15:10:48
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define maxim 100009

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");



/*ifstream f("../dt.in");
ofstream g("../dt.out");*/

int dp[maxim],fin[maxim],len;
int v[maxim],n;

void sir(int x)
{
    if (fin[x]==0)
    {
        g<<v[x]<<" ";
        return;
    }
    sir(fin[x]);
    g<<v[x]<<" ";
}


int bs(int x)
{
   int i=1;
   int ans;
   int j=len;
   while (i<=j)
   {
       int m=(i+j)/2;
       if (v[x]==v[dp[m]])
           return m;
       if (v[x]<v[dp[m]])
           j=m-1;
       else i=m+1;
   }
   return i;
}


int main()
{
    dp[1]=1;
    f>>n;
    for (int i=1;i<=n;i++)
        f>>v[i];
    len=0;
    for (int i=1;i<=n ;i++)
    {
        if (v[i]>v[dp[len]])
        {
            fin[i]=dp[len];
            dp[++len]=i;

        }
        else
        {
            //cout<<"Da"<<endl;
            int x=bs(i);
            dp[x]=i;
            fin[i]=dp[x-1];

        }

    }

    g<<len<<'\n';
    sir(dp[len]);

}