Pagini recente » Cod sursa (job #2908939) | Cod sursa (job #1397357) | Cod sursa (job #1932658) | Cod sursa (job #2382563) | Cod sursa (job #3242531)
//https://www.infoarena.ro/problema/scmax
#include <fstream>
#include <vector>
std::ifstream fin("scmax.in");
std::ofstream fout("scmax.out");
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
vector<int> v, dp, t;
void drum(int u)
{
if (u)
{
drum(t[u]);
fout << v[u] << ' ';
}
}
int main()
{
int n, p, st, dr, m, mid;
fin >> n;
v.resize(n + 1);
t.resize(n + 1, 0);
dp.resize(n + 1, 0);
for (int i = 1; i <= n; ++i)
fin >> v[i];
m = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i)
{
st = 1;
dr = m;
while (st <= dr)
{
mid = st + (dr - st) / 2;
if (v[dp[mid]] >= v[i])
dr = mid - 1;
else
st = mid + 1;
}
if (st > m)
{
m++;
dp[m] = i;
t[i] = dp[st - 1];
}
else
{
dp[st] = i;
t[i] = dp[st - 1];
}
}
fout << m << '\n';
drum(dp[m]);
}