Pagini recente » Cod sursa (job #2341409) | Cod sursa (job #1272359) | Cod sursa (job #2406439) | Cod sursa (job #2325997) | Cod sursa (job #2101993)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 1e5;
int n;
int v[NMAX + 2];
int len;
int val[NMAX + 2], best[NMAX + 2];
vector<int> ans;
int bs(int arg)
{
int st = 0, dr = len, last = len;
while(st <= dr)
{
int med = (st + dr) / 2;
if(val[med] >= arg)
dr = med - 1;
else
{
st = med + 1;
last = med;
}
}
return last + 1;
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i <= n; i++)
{
int pos = bs(v[i]);
val[pos] = v[i];
best[i] = pos;
len = max(len, pos);
}
out << len << '\n';
for(int i = n; i >= 1 && len; i--)
if(best[i] == len)
{
ans.push_back(v[i]);
len--;
}
for(int i = ans.size() - 1; i >= 0; i--)
out << ans[i] << ' ';
out << '\n';
return 0;
}