Pagini recente » Cod sursa (job #1804428) | Cod sursa (job #308619) | Cod sursa (job #2759064) | Cod sursa (job #2128066) | Cod sursa (job #536729)
Cod sursa(job #536729)
#include<fstream>
#include<cstdio>
#include<cstdlib>
#define mare 0x3ffffffff
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
typedef int vector[100001];
vector v, p, q;
int n, ng = 1;
void sol(int last, int nr)
{
if(nr)
for(int i = last; i > 0; --i)
if(p[i] == nr)
{
sol(i-1, --nr);
g << v[i] << ' ';
break;
}
}
int cautabin(int k, int poz)
{
int i, st = 1, fn = ng, m;
while(st <= fn)
{
m = (st + fn) / 2;
if(q[m] >= k && q[m-1] < k)
{
q[m] = k;
p[poz] = m;
break;
}
else if(q[m] >= k)
fn = m;
else
st = m + 1;
}
if(st > fn)
{
p[poz] = ng;
q[ng++] = k;
}
}
int main()
{
int i, l;
f >> n;
for(i = 1; i <= n; ++i)
{
f >> v[i];
cautabin(v[i], i);
}
g << --ng << '\n';
sol(n, ng);
g << '\n';
g.close();
return 0;
}