Pagini recente » Cod sursa (job #2412316) | Cod sursa (job #3221661) | Cod sursa (job #1298773) | Cod sursa (job #1799812) | Cod sursa (job #3213641)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100005];
int dp[100005], poz[100005], m;
int sol[100005];
int CautBin(int x)
{
int st, dr, p, mij;
if (x > dp[m])
{
m++;
return m;
}
if (x <= dp[1]) return 1;
st = 1; dr = m; p = 0;
while (st <= dr)
{
mij = (st + dr) / 2;
if (x <= dp[mij])
{
p = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return p;
}
int main()
{
int i, j, p, M;
fin >> n;
for (i = 1; i <= n; i++)
fin >> a[i];
m = 1;
dp[1] = a[1];
poz[1] = 1; ///poz[i] = 1; HOW?!?
for (i = 2; i <= n; i++)
{
p = CautBin(a[i]);
dp[p] = a[i];
poz[i] = p;
}
fout << m << "\n";
M = m;
for (i = n; i >= 1 && m > 0; i--)
if (poz[i] == m)
{
sol[m] = a[i];
m--;
}
for (i = 1; i <= M; i++)
fout << sol[i] << " ";
fout << "\n";
return 0;
}