Cod sursa(job #1528160)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 19 noiembrie 2015 10:11:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#define DIM 100005
using namespace std;
int n, i, p, u, mid, nr;
int v[DIM], w[DIM], t[DIM];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void drum(int p){
    if(p != 0){
        drum(t[p]);
        fout<< v[p] <<" ";
    }
}
int main(){
    fin>> n;
    for(i = 1; i <= n; i++){
        fin>> v[i];
    }
    w[1] = 1;
    nr = 1;
    for(i = 2; i <= n; i++){
        if(v[ w[nr] ] < v[i]){
            nr++;
            w[nr] = i;
            t[i] = w[nr - 1];
        }
        else{
            p = 1;
            u = nr;
            while(p <= u){
                mid = (p + u) / 2;
                if(v[ w[mid] ] > v[i]){
                    u = mid - 1;
                }
                else{
                    p = mid + 1;
                }
            }
            if(v[i] > v[ w[p - 1]]){
                w[p] = i;
                t[i] = w[p - 1];
            }
        }
    }
    fout<< nr <<"\n";
    drum(w[nr]);
    return 0;
}