Pagini recente » Cod sursa (job #48731) | Cod sursa (job #779464) | Cod sursa (job #2572331) | Cod sursa (job #2279210) | Cod sursa (job #1856277)
#include <fstream>
using namespace std;
int n, v[100005], m[100005], p[100005], nr, s[100005];
void read()
{
ifstream fin ("scmax.in");
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> v[i];
fin.close();
}
int src(int x)
{
int lo = 0, hi = nr;
for (int mid = (lo + hi) >> 1; lo <= hi; mid = (lo + hi) >> 1)
if (v[m[mid]] < x && v[m[mid+1]] >= x)
return mid;
else if (v[m[mid]] < x)
lo = mid + 1;
else
hi = mid - 1;
return nr;
}
void solve()
{
int poz;m[1] = 1, m[0] = 0;
for (int i = 1; i <= n; ++i){
poz = src(v[i]);
if (poz + 1> nr)
nr = poz + 1;
p[i] = m[poz];
m[poz + 1] = i;
}
int k = m[nr];
for (int i = nr - 1; i >= 0; --i){
s[i] = v[k];
k = p[k];
}
}
void write()
{
ofstream fout ("scmax.out");
fout << nr << "\n";
for (int i = 0; i < nr; ++i)
fout << s[i] << " ";
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}