Cod sursa(job #2202792)

Utilizator TudorCaloianCaloian Tudor-Ioan TudorCaloian Data 9 mai 2018 21:27:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100001], capete[100001], v[100001], k, b[100001];

int Cautare_Binara(int li, int ls, int x)
{
   int raspuns = -1;

   while(li <= ls)
   {
       int mij = (li + ls)/2;

       if(capete[mij] < x)
       {
           raspuns = mij;
           li = mij + 1;

       }
       else
       {
           ls = mij - 1;
       }



   }
   return raspuns;
}

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

    for(int i = 1; i <= n; i++)
    {

        int poz;

        poz = Cautare_Binara(0, k, v[i]);
        a[i] = poz + 1;
        capete[poz+1] = v[i];

        k = max(k, poz+1);





    }
    int p = 0;
      fout << k << '\n';
      for(int i = n; i > 0; i--)
      {
          if(a[i] == k)
          {
              b[p++] = v[i];
              k--;
          }
      }
      for(int i = p-1; i >=0; i--)
        fout << b[i] << " ";



    return 0;
}