Pagini recente » Cod sursa (job #2024107) | Cod sursa (job #1481214) | Cod sursa (job #2018204) | Cod sursa (job #2171453) | Cod sursa (job #2484844)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, k, poz, j;
int dp[100005], v[100005], a[100005], prev[100005], rasp[100005];
int bs(int val)
{
int st = 1, dr = k, mij, rasp = 0;
while (st <= dr)
{
mij = (st + dr) / 2;
if (a[v[mij]]< val)
{
st = mij + 1;
rasp = mij;
}
else
dr = mij - 1;
}
return rasp;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; ++i)
{
fin >> a[i];
j = bs(a[i]);
dp[i] = j + 1;
if (j == k)
v[++k] = i;
else if (a[v[j + 1]] > a[i])
v[j + 1] = i;
prev[i] = v[j];
}
poz = v[k];
k = 0;
while(poz)
{
rasp[++k] = a[poz];
poz = prev[poz];
}
fout << k << "\n";
for (int i = k; i >= 0; i--)
fout << rasp[i] << ' ';
return 0;
}