Cod sursa(job #2204003)

Utilizator silviu982001Borsan Silviu silviu982001 Data 14 mai 2018 01:16:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>
using namespace std;

#define NMAX 100002

vector<int> v(NMAX), sol(NMAX), prevpos(NMAX);
int n, maxim = 0;

void printsol(ofstream &fout, int maxim)
{
    if (prevpos[maxim] > 0)
        printsol(fout, prevpos[maxim]);
    fout << v[maxim] << " ";
}

int main()
{
    ifstream fin("scmax.in");
    fin >> n;
    for (int i = 1; i <= n;i++)
        fin >> v[i];
    fin.close();
    for (int i = 1; i <= n; i++)
    {
        int left = 0, right = maxim;
        while (left <= right)
        {
            int mid = (left + right) >> 1;
            if (v[sol[mid]] < v[i])
                left = mid + 1;
            else right = mid - 1;
        }
        prevpos[i] = sol[left-1];
        sol[left] = i;
        maxim = max(maxim, left);
    }
    ofstream fout("scmax.out");
    fout << maxim << endl;
    printsol(fout, sol[maxim]);
    fout.close();
    return 0;
}