Cod sursa(job #2966401)

Utilizator Robilika2007Robert Badea Robilika2007 Data 17 ianuarie 2023 15:16:50
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

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

#define MAX_a 2000000000
#define MAX_n 100000
int v[MAX_n], d[MAX_n], pred[MAX_n], s[MAX_n];

int cautabin (int st, int dr, int a)
{
    int mij = dr + st / 2;
    if(dr - st <= 1) return st;
    if(a > v[s[mij]])
    {
        cautabin(mij, dr, a);
    }
    else
    {
        cautabin(st, mij, a);
    }
}

void scrie(int poz)
{
    if(poz <= 1) return;
    scrie(pred[poz]);
    cout << v[s[poz]];
}

int main()
{
    int n, ans = 0, a;
    cin >> n;

    for (int i = 0; i < n; ++i)
        s[i] = MAX_a + 1;
    for(int i = 0; i < n; ++i)
    {
        cin >> v[i];
        int lung = cautabin(1, ans, v[i]) + 1;
        if(v[i] < v[s[lung]])
        {
            s[lung] = i;
            pred[lung] = lung - 1;
        }
        ans = max(ans, lung);
    }

    cout << ans << '\n';
    scrie(ans);
}