Cod sursa(job #2419963)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 9 mai 2019 22:18:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

#define Nmax 100000

using namespace std;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int N;

int A[1 + Nmax + 5];
int Poz[1 + Nmax + 5];
int Last[1 + Nmax + 5];

vector < int > Answers;

int length = 0;

inline int binarySearch (int value)
{
    int answer = 0;
    int pow = 1 << 18;
    while (pow)
    {
        if (answer + pow <= length && A[Poz[answer + pow]] < A[value])
            answer += pow;
        pow >>= 1;
    }
    return answer;
}

int main()
{
    Last[1] = 0;
    int left = 1;
    fin >> N;
    for (int i = 1; i <= N; ++i)
    {
        fin >> A[i];
        int poz = binarySearch (i);
        Poz[1 + poz] = i;
        Last[i] = Poz[poz];
        if (poz + 1 > length)
            length = poz + 1, left = i;
    }
    fout << length << "\n";
    while (left)
        Answers.push_back (left), left = Last[left];
    for (int i = Answers.size () - 1; 0 <= i; --i)
        fout << A[Answers[i]] << " ";
    return 0;
}