Cod sursa(job #1811770)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 21 noiembrie 2016 16:19:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX=101000;
int a[MAX],b[MAX],poz[MAX];
int n,m;

void read(){
    fin>>n;
    for(int i=1;i<=n;i++) fin>>a[i];

}

int caut (int p,int u,int x){
    int m;
    while(p<=u){
        m=p+(u-p)/2;
        if (x<a[b[m]]) p=m+1;
        else u=m-1;
    }
return p;

}

void sequence(){
    int i,j,k;
    a[0]=INT_MAX;
    for(i=n;i>=1;i--){
        poz[i]=0;
        k=caut(1,m,a[i]);
        if (k>m){
            poz[i]=b[k-1];
            m=k;
            b[k]=i;
        }
        else {
            poz[i]=b[k-1];
            if (a[b[k]]<a[i]) b[k]=i;
        }

    }

}

void write(){
    int i;
    fout <<m<<endl;
    for(i=b[m];i>0;i=poz[i]) fout <<a[i]<<" ";

}

int main(){
    read();
    sequence();
    write();

}