Cod sursa(job #2939151)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 13 noiembrie 2022 09:04:07
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
#include<vector>
using namespace std;

const int NMAX = 1e5 + 2;

vector<int> info(NMAX,2e9),v(NMAX);

//d[i] = elementul la care se termina un subsir de lungime i

int bin(int val,int st,int dr)
{
    int ans = 0;
    while(st <= dr)
        {
            int mid = st + (dr - st) / 2;
            if(info[mid] > val)
                {
                    ans = mid;
                    dr = mid - 1;
                }

            else
                {
                    st = mid + 1;
                }
        }

    return ans;
}

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

    int n; cin >> n;
    info[0] = -2e9;

    for(int i = 1; i <= n ; i++)
        {
            cin >> v[i];
            int ant = bin(v[i],1,i);
            if(info[ant - 1] < v[i] && info[ant] > v[i])
                {
                    info[ant] = v[i];
                }
        }

    int ans = 1;
    for(int l = 1; l <= n ; l++)
        {
            if(info[l] != 2e9)
                {
                    ans = l;
                }
        }

    cout << (ans);
}