Pagini recente » Cod sursa (job #3258917) | Cod sursa (job #407387) | Cod sursa (job #2194708) | Cod sursa (job #2443021) | Cod sursa (job #1647393)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 100010
#define INF 2001000000
int a[MAX], rez[MAX], p[MAX], val[MAX];
int main()
{
int n, i, st, dr, ok, mx;
fin >> n;
a[0] = -INF;
a[n + 1] = INF;
rez[0] = 0;
for(i = 1 ; i <= n ; i++)
{
rez[i] = n + 1;
fin >> a[i];
}
for(i = 1 ; i <= n ; i++)
{
st = 1;
dr = n;
ok = 1;
while(st <= dr)
{
int mij = (st + dr) >> 1;
if(a[rez[mij]] >= a[i])
{
ok = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
p[i] = rez[ok - 1];
rez[ok] = i;
val[i] = ok;
}
mx = 1;
for(i = 1 ; i <= n ; i++)
{
if(val[i] > val[mx])
mx = i;
}
fout << val[mx] << "\n";
int t = val[mx];
for(i = t ; i >= 1 ; i--)
{
val[i] = mx;
mx = p[mx];
}
for(i = 1 ; i <= t ; i ++)
{
fout << a[val[i]] << " ";
}
}