Pagini recente » Cod sursa (job #1077176) | Cod sursa (job #691550) | Cod sursa (job #1056823) | Cod sursa (job #1103135) | Cod sursa (job #2118391)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int DIM = 100001;
int v[DIM], pozmin[DIM], pred[DIM];
int n, m;
int cautb(int nr);
void subsir(int nr);
int main()
{
int j;
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> v[i];
}
for(int i = 1; i <= n; ++i)
{
j = cautb(v[i]);
pozmin[j + 1] = i;
pred[i] = pozmin[j];
if(j == m)
{
++m;
}
}
cout << m << '\n';
subsir(pozmin[m]);
return 0;
}
int cautb(int nr)
{
int r = 0, pas = 1 << 16;
while(pas)
{
if(r + pas <= m && v[pozmin[r + pas]] < nr)
r += pas;
pas /= 2;
}
return r;
}
void subsir(int nr)
{
if(pred[nr])
{
subsir(pred[nr]);
}
cout << v[nr] << ' ';
}