Cod sursa(job #1429370)

Utilizator lauratalaatlaura talaat lauratalaat Data 6 mai 2015 10:45:01
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
int n, nr, v[100001],pred[100001],mic[100001],afi[100001];
int cb ( int x ){
    int i=0,pas=1<<16;
    while(pas!=0){
        if(i+pas <= nr && v[mic[i+pas]]<x)
            i+=pas;
        pas>>=1;
    }
    return i;
}

void subsir(int p)
{
    if (pred[p] != 0)
        subsir(pred[p]);
    printf("%d ", v[p]);
}

int main(){
    int i,j,k;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    nr=0;
    mic[++nr]=1;
    for(i=2;i<=n;i++){
        j=cb(v[i]);
        pred[i]=mic[j];
        mic[j+1]=i;
        if(j==nr)
            nr++;
    }
    printf("%d\n",nr);
    subsir(mic[nr]);
    return 0;

}