Cod sursa(job #1836427)

Utilizator FilipCristian88Filip Georgescu FilipCristian88 Data 28 decembrie 2016 13:00:42
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in")
ofstream fout("scmax.out")
const int MAX_N = 1 + 100000;
int N, a[MAX_N], indice[MAX_N], indice_anterior[MAX_N], solutie[MAX_N];
int lungime;
void read_imput()
{
    fin>>N;
    for(int i = 1;i <= N;i++)
        fin>>a[i];
}

int cauta_binar(int i)
{int stanga = 1, dreapta = N, sol = 0;
    while (stanga <= dreapta)
    {int mijloc = (stanga + dreapta)/2;
    if(a[i] > a[indice[mijloc]])
        {
            solutie = mijloc;
            stanga = n / 2 + 1
        }
        else dreapta = n / 2 - 1;
    }
    return solutie + 1;
}
void connstruieste_dinamica()
{indice[1] = 1; lungim = 1;
if(a[i] > a[indice[lungime]])
  {lungime++;
  idice[lugime] = i;
}indice_anterior[i]= indice[lungime - 1];
else
    {
        int pozitie = cauta_binar(i);
        idice[pozitie] = i;
        indice_anterior(i) = indice[pozitie - 1];

    }
}
void obtine_solutie()
{
    int pozitie = lungime; i = indice[lungime];
    while(i > 0)
    {
        solutie[pozitie] = a[i];
        i = indice_anterior[i];
        pozitie--;
    }
}
void afiseaza_solutia()
{
    fout<< lungime <<'\n';
    for(int i = 1;i <= lungime;i++)
    fout<<solutie[i]<<" ";
}

int main()
{
read_imput()
construieste_dinamica()
obtine_solutie()
afiseaza_solutia()
    return 0;
}