Pagini recente » Cod sursa (job #1134282) | Cod sursa (job #1909620) | Cod sursa (job #786028) | Atasamentele paginii Clasament racovita_combate_stresul_10 | Cod sursa (job #2334030)
#include <fstream>
#include <iostream>
#define MAX 100001
using namespace std;
int v[MAX], T[MAX], R[MAX], ordine[MAX];
int main()
{
int n, i, j, st, dr, mij, length = 0, gasit;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
fin >> n;
for(i = 1; i <= n; i++)
fin >> v[i];
length = 1;
T[1] = 1;
for(i = 2; i <= n; i++)
{
st = 1;
dr = length;
gasit = -1;
while(st <= dr)
{
mij = (st + dr) / 2;
if(v[i] < v[T[mij]])
{
gasit = mij;
dr = mij - 1;
}
else st = mij + 1;
}
if(gasit == -1 && v[i] > v[T[length]])
{
R[i] = T[length];
length++;
T[length] = i;
}
else if(v[T[gasit - 1]] < v[i])
{
R[i] = T[gasit - 1];
T[gasit] = i;
}
}
fout << length << endl;
for(i = n; i >= 1 && R[i] == 0; i--){}
j = 1;
ordine[j] = v[i];
j++;
while(R[i] != 0)
{
ordine[j] = v[R[i]];
j++;
i = R[i];
}
for(j = j - 1; j >= 1; j--)fout << ordine[j] << " ";
fin.close();
fout.close();
return 0;
}