Pagini recente » Cod sursa (job #502618) | Cod sursa (job #410816) | Cod sursa (job #2798643) | Cod sursa (job #2824161) | Cod sursa (job #1510382)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 100010
#define INF 2000000100
int p[MAX], a[MAX], r[MAX], n, i, vf, st, dr, ok;
void f(int i)
{
if(i)
{
f(p[i]);
fout << a[i] << " ";
}
}
int main()
{
fin >> n;
for(i = 1 ; i <= n ; i++)
{
fin >> a[i];
}
a[0] = -INF;
a[n + 1] = INF;
r[0] = 0;
for(i = 1 ; i <= n ; i++)
r[i] = n + 1;
vf = 0;
for(i = 1 ; i <= n ; i++)
{
st = 0;
dr = vf;
while(st <= dr)
{
int mij = (st + dr) >> 1;
if(a[r[mij]] < a[i])
{
ok = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
p[i] = r[ok];
r[ok + 1] = i;
vf = max(vf, ok + 1);
}
fout << vf << "\n";
f(r[vf]);
}