Pagini recente » Cod sursa (job #2294620) | Cod sursa (job #1815977) | Cod sursa (job #868603) | Cod sursa (job #2022213) | Cod sursa (job #2833105)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, x, i, A[100001], P[100001], k, D[100001];
int cautareBinara (int k, int n)
{
int st = 0, dr = k - 1;
while(st <= dr)
{
int m = (st + dr) / 2;
if(D[m] == n)
return m;
else if(D[m] < n)
st = m + 1;
else
dr = m - 1;
}
return st;
}
int main()
{
fin >> n;
int poz = 0;
fin >> A[0];
D[0] = A[0];
k = 1;
P[0] = 0;
for(i = 1; i < n; i++)
{
fin >> A[i];
if(A[i] > D[k-1])
{
D[k] = A[i];
P[i] = k;
k++;
poz = i;
}
else
{
int p = cautareBinara(k, A[i]);
D[p] = A[i];
P[i] = p;
}
}
fout << k << '\n';
k--;
int j = 0;
for(i = poz; k >= 0; i--)
{
if(P[i] == k)
{
D[j++] = i;
k--;
}
}
for(i = j - 1; i >= 0; i--)
fout << A[D[i]] << ' ';
return 0;
}