Cod sursa(job #2166126)

Utilizator AndreiOffCovaci Andrei-Ion AndreiOff Data 13 martie 2018 15:39:46
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

vector<int> a, b;

int t[100020], n;

void cmlsc(vector<int> &a, vector<int> &b){

int c=0, f=0, l=0;

b.push_back(0);
t[0]=0;

for(int i=1; i<a.size(); i++){

    if(a[i]>a[b.back()]){

        t[i]=b.back();
        b.push_back(i);


    }

    for(f=0, l=b.size()-1; f<l;){

        c=(f+l)/2;
        if(a[i]>a[b[c]])f=c+1; else l=c;

    }
    if(a[i]<a[b[l]]){

        b[l]=i;
       if(l>0) t[i]=b[l-1];

    }

}

for(l=b.size(), f=b.back(); l--; f=t[f])b[l]=f;

}

int main()
{

h>>n;

for(int i=1; i<=n; i++){

    int x;
    h>>x;
    a.push_back(x);

}

cmlsc(a, b);

g<<b.size()<<"\n";
for(int i=0; i<b.size(); i++)g<<a[b[i]]<<" ";

    return 0;
}