Cod sursa(job #3215052)

Utilizator alexandraiacobelAlexandra Iacob alexandraiacobel Data 14 martie 2024 17:38:20
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N = 1e5;
int a[N + 1];

vector <int> ans, poz, sol;

int n, len;

int main()
{
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> a[i];

    ans.push_back(a[1]);
    poz.push_back(0);

    for (int i = 2; i <= n; ++i)
    {
        vector <int> :: iterator it = lower_bound(ans.begin(), ans.end(), a[i]);
        int pos = it - ans.begin(); //da nr de la lowerbound
        if (it == ans.end()) ///Daca nu avem numar >=
           ans.push_back(a[i]);
        else               ///Altfel
            *it = a[i]; //schimb chiar pointer-ul

        poz.push_back(pos); //pastrez pozitia
    }

    fout << ans.size() << '\n';
    int len = ans.size() - 1;
    //ans = 12 15 19
  /*  for (int i = poz.size() - 1; i >= 0 && len >= 0; --i)
    {
        if (poz[i] != len)
            continue;
        sol.push_back(i + 1);
        len--;
    }
    for(int i=0; i<n; i++)
        cout<<poz[i]<<' ';
    cout<<'\n';
*/
   // reverse (sol.begin(), sol.end()); ///

    for (int it : ans)
        fout << it<< ' ';
    return 0;
}