Pagini recente » Cod sursa (job #103186) | Cod sursa (job #1919033) | Cod sursa (job #2638252) | Cod sursa (job #2780330) | Cod sursa (job #2564727)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax = 100005;
int v[nmax], l[nmax], p[nmax];
int n, k;
int cb (int l[], int len, int e)
{
int st = 1, dr = len, mij;
while (st <= dr)
{
mij = (st + dr) / 2;
if (v[l[mij]] > e)
dr = mij - 1;
else if (v[l[mij]] < e)
st = mij + 1;
else
return st;
}
return st;
}
void Afis(int s)
{
if (s)
Afis(p[s]);
else
return;
fout << v[s] << ' ';
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
int pos = cb(l, k, v[i]);
if (pos <= k)
l[pos] = i;
else
l[++k] = i;
p[i] = l[pos - 1];
}
fout << k << '\n';
Afis(l[k]);
fin.close();
fout.close();
return 0;
}