Cod sursa(job #2437731)

Utilizator DariusDCDarius Capolna DariusDC Data 10 iulie 2019 09:55:48
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 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<<20;
        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;
}