Cod sursa(job #1423745)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 22 aprilie 2015 15:22:54
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;
int n, i, nr, p, u, mid;
int v[100001], w[100001], t[100001];
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;
}