Cod sursa(job #1645475)

Utilizator serbanSlincu Serban serban Data 10 martie 2016 12:29:18
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <set>

using namespace std;

struct tip{
    int v, l, i;
};

int a[100005];
int t[100005];
set<tip> s;

bool operator < (const tip A, const tip B) {
    if(A.v == B.v)
        return A.l < B.l;
    return A.v > B.v;
}

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

void afis(int i) {
    if(i) {
        afis(t[i]);
        g << a[i] << " ";
    }
}

int main()
{
    int n, m = 0, p; f >> n;
    for(int i = 1; i <= n; i ++) f >> a[i];

    tip aux;
    aux.v = a[1];
    aux.l = 1;
    aux.i = 1;
    s.insert(aux);

    for(int i = 2; i <= n; i ++) {
        aux.v = a[i];
        set<tip>::iterator it = s.lower_bound(aux);
        aux = *it;
        if(aux.v < a[i])
            aux.l ++;
        if(aux.l > m) m = aux.l, p = i;
        t[i] = aux.i;
        aux.i = i;
        aux.v = a[i];
        s.insert(aux);
    }
    g << m << "\n";
    afis(p); g << "\n";
    return 0;
}