Cod sursa(job #1101044)

Utilizator muresan_bogdanMuresan Bogdan muresan_bogdan Data 7 februarie 2014 21:06:00
Problema Subsir crescator maximal Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<iostream>
#include<fstream>
using namespace std;

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

int n, v[100001], i, fr[100001], frmax;

void bin(int L, int R) {
    int mid;
    if(L == R) {
        if(v[i] < fr[frmax]) {
            frmax++;
            fr[frmax] = v[i];
        }
        else {
            fr[frmax] = v[i];
        }
    }
    else {
        while(L + 1 != R) {
            mid = (L + R) / 2;
            if(v[i] <= fr[mid]) {
                L = mid;
            }
            else {
                R = mid;
            }
        }
        if(v[i] < fr[R]) {
            fr[R+1] = v[i];
            if(frmax == R) frmax++;
        }
        else {
            if(v[i] < fr[L]) fr[R] = v[i];
        }
    }
}

int main() {
    fin >> n;
    for(i = 0; i < n; i++) {
        fin >> v[i];
    }
    fr[1] = v[n-1];
    frmax = 1;
    for(i = n-2; i >= 0; i--) {
        for(int j = 1; j <= frmax; j++) {
            //cout << fr[j] << ' ';
        }
        //cout << ' ';
        bin(1, frmax);
    }
    fout << frmax << '\n';
    for(i = frmax; i >= 1; i--) {
        fout << fr[i] << ' ';
    }
    fin.close();
    fout.close();
    return 0;
}