Cod sursa(job #3215799)

Utilizator AlexMoto2006Motoasca Alexandru-Lucian AlexMoto2006 Data 15 martie 2024 13:01:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

int n, m, i;
int len, lenfin;
int a[100001];
int sol[100001];
int poz1[100001];
int sol1[100001];

int binarysearch(int x)
{
    if (len == 0)
    {
        len++;
        return len;
    }
    if (sol[1] >= x)
    {
		return 1;
	}
    if (sol[len] < x)
    {
        len++;
        return len;
    }
    int st = 1, dr = len, poz=n+1;
    while (st <= dr)    
    {
		int mij = (st + dr) / 2;
        if (sol[mij] >= x)
        {
            poz = mij;
            dr = mij - 1;
        }
		else
			st = mij + 1;
	}
    return poz;
}

int main() {
    cin >> n;
    int x, j;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++)
    {
        j = binarysearch(a[i]);
        sol[j] = a[i];
        poz1[i] = j;
    }
    j = len;
    for (int i = n; i >= 1; i--)
    {
            if (poz1[i] == j)
            {
			    sol1[j] = a[i];
			    j--;
		    }
	}
    cout << len << "\n";
    for (int i = 1; i <= len; i++)
    {
		cout << sol1[i] << " ";
	}
    return 0;
}