Cod sursa(job #2207210)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 25 mai 2018 10:41:42
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
#define N_MAX 100005
using namespace std;
int n,a[N_MAX],b[N_MAX],o,poz[N_MAX];
ifstream in("scmax.in");
ofstream out("scmax.out");
void read()
{
    in >> n;
    for(int i=1; i<=n; i++)
    {
        in >> a[i];
    }
}
int cauta(int st, int dr, int val)
{
    int m;
    while(st<=dr)
    {
        m=st+(dr-st)/2;
        if(val<a[b[m]])
            st=m+1;
        else
            dr=m-1;
    }
    return st;
}
void solve()
{
    int k;
    a[0]=2000000001;
    for(int i=n; i>=1; i--)
    {
        k=cauta(1,o,a[i]);
        out << k << ' ' << o << '\n';
        if(k>o)
        {
            poz[i]=b[k-1];
            o=k;
            b[k]=i;
        }
        else
        {
            poz[i]=b[k-1];
            if(a[b[k]]<a[i])
            {
                b[k]=i;
            }
        }
    }
}
void afis()
{
    out << o << '\n';
    for(int i=b[o]; i>0; i=poz[i])
    {
        out << a[i] << ' ';
    }
}
int main()
{
    read();
    solve();
    afis();
    return 0;
}