Pagini recente » Cod sursa (job #2700861) | Cod sursa (job #2659686) | Cod sursa (job #2370654) | Cod sursa (job #2531595) | Cod sursa (job #2208415)
#include <iostream>
#include <vector>
#include <fstream>
#define NUM 100005
int v[NUM];
int n, lng;
using namespace std;
vector<int> ind_ult(NUM, 0);
vector<int> ind_prec(NUM, -1);
ofstream g("scmax.out");
int Ceil(int st, int dr, int num)
{
while (dr - st > 1)
{
int m = st + (dr - st) / 2;
if (v[ind_ult[m]] >= num)
dr = m;
else
st = m;
}
return dr;
}
void afis(int i)
{
if(i >= 0 && i < n)
{
afis(ind_prec[i]);
g << v[i] << " ";
}
}
int main()
{
ifstream f("scmax.in");
f >> n;
for(int i = 0; i < n; ++i)
f >> v[i];
lng = 1;
for (int i = 1; i < n; i++)
{
if (v[i] < v[ind_ult[0]])
{
ind_ult[0] = i;
}
else if (v[i] > v[ind_ult[lng-1]])
{
ind_prec[i] = ind_ult[lng-1];
ind_ult[lng++] = i;
}
else
{
int pos = Ceil(-1, lng-1, v[i]);
ind_prec[i] = ind_ult[pos-1];
ind_ult[pos] = i;
}
}
g << lng << "\n";
afis(ind_ult[lng - 1]);
g << "\n";
f.close();
}