Pagini recente » Cod sursa (job #1506335) | Cod sursa (job #2303641) | Cod sursa (job #293245) | Cod sursa (job #884349) | Cod sursa (job #2576377)
#include <iostream>
#include <fstream>
#define Nrmax 100000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[Nrmax];
int dp[Nrmax];
int p[Nrmax];
int nr_elemente;
int nr_dp = 1;
int nr_p = 1;
int nr_elemente_solutie =1 ;
int cautare_binara(int val, int nr_elemente_dp)
{
int i, step;
for (step = 1; step < nr_elemente_dp; step <<= 1);
for (i = 1; step; step >>= 1)
if (i + step < nr_elemente_dp && dp[i + step] >= val)
i += step;
return i;
}
void citire()
{
f >> nr_elemente;
for(int i = 1; i <= nr_elemente ; i++)
f >> a[i];
}
void parg()
{
dp[nr_dp++] = a[1];
p[nr_p++] = 1;
for(int i = 2; i <= nr_elemente ; i++)
{
if(a[i] <= dp[nr_dp-1])
{
int poz = cautare_binara(a[i],nr_dp);
dp[poz] = a[i];
p[nr_p] = p[poz];
nr_p++;
}
else
{
dp[nr_dp++] = a[i];
nr_elemente_solutie++;
}
}
}
void afisare(int a[], int nr_elemente)
{
for(int i = 1; i <= nr_elemente ; i++)
cout << a[i] << ' ';
cout << '\n';
}
int main()
{
citire();
parg();
g << nr_elemente_solutie << '\n';
for(int i = 1; i <= nr_elemente_solutie ; i++)
g << dp[i] << ' ';
return 0;
}