Cod sursa(job #1328597)

Utilizator ooptNemes Alin oopt Data 28 ianuarie 2015 16:21:34
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
/// scmax
#include <iostream>
#include <fstream>
#define inf (1<<30)+100
#define NMax 100005
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n;
int A[NMax];
int best[NMax];

void solve() {
    for (int i=1;i<=n;i++) {
        best[i] = inf;
    }
    best[0] = -1;

    for (int i=1;i<=n;i++) {
        int x = A[i];
        int left = 0, right = i+1;
        while (right-left-1) {
            int mij = (left+right)/2;
            if (best[mij] < x)
                left = mij;
            else
                right = mij;
        }
        if (best[right] > x) {
            best[right] = x;
        }
    }

    int left = 0, right = n+1;
    while (right-left-1) {
        int mij = (left+right)/2;
        if (best[mij] < inf)
            left = mij;
        else
            right = mij;
    }

    g<<right<<'\n'; /// Primul raspuns

}

void read() {
    f>>n;
    for (int i=1;i<=n;i++)
        f>>A[i];
}

int main() {

    read();
    solve();

    f.close(); g.close();
    return 0;
}