Cod sursa(job #930631)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 27 martie 2013 19:12:34
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int N = 100010;
int v[N], aux[N], pd[N], n, c;

int caut_bin(int poz, int dr){
    int st=0, mid;
    while(st < dr){
        mid = (st + dr)/2;
        if(v[mid] > poz)
            dr = mid;
        else
            st = mid+1;
    }
    return st;
}

int main(){
    int i, j=1;
    fin >> n;
    for(i=1; i<=n; ++i)
        fin >> v[i];

    aux[1] = v[1];
    pd[1] = 1;
    for(i=2; i<=n; ++i){
        if(v[i] > aux[j]){
            j++;
            aux[j] = v[i];
            pd[i] = j;
        }
        else{
            c = caut_bin(v[i], j);
            aux[c] = v[i];
            pd[i] = c;
        }
    }

    fout << j << "\n";
    c = j;
    for(i=n; i>0; --i){
        if(pd[i] == c){
            aux[c] = v[i];
            c--;
        }
        if(c == 0)
            break;
    }
    for(i=1; i<=j; ++i)
        fout << aux[i] << " ";

    fin.close();
    fout.close();

    return 0;
}