Cod sursa(job #2418100)

Utilizator MatteoalexandruMatteo Verzotti Matteoalexandru Data 3 mai 2019 16:33:31
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <cstdio>

using namespace std;
const int N = 100000;
int v[N+5],poz[N+5],sol[N+5],vinit[N+5];
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,Max=0,nr,r,pas;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        cin>>nr;
        vinit[i] = nr;
        r = 0;
        pas = 1<<10;
        while(pas){
            if(r+pas <= Max && sol[r+pas] < nr)
                r+=pas;
            pas >>= 1;
        }
        r++;
        if(r > Max)
            sol[++Max] = nr;
        else
            sol[r] = nr;
        poz[i] = r;
    }
    printf("%d\n",Max);
    for(i=n;i>=1;i--){
        if(poz[i] == Max){
            v[Max] = vinit[i];
            Max--;
            v[0]++;
        }
    }
    for(i=1;i<=v[0];i++)
        printf("%d ",v[i]);
    return 0;
}