Pagini recente » Cod sursa (job #2790113) | Cod sursa (job #647013) | Cod sursa (job #1464292) | Cod sursa (job #2522578) | Cod sursa (job #535124)
Cod sursa(job #535124)
// SCMAX N logN
#include <fstream>
#include <iostream>
#define MAXN 100005
using namespace std;
int n, v[MAXN], best[MAXN], a[MAXN], dima, maxim, ant[MAXN], pozz, sol[MAXN];
int bin_Search(int x)
{
int st = 0, dr = dima, mid;
while(st <= dr)
{
mid = (st + dr) / 2;
if(v[a[mid]] < x && v[a[mid + 1]] >= x)
return mid;
else
if(v[a[mid + 1]] < x)
st = mid + 1;
else
dr = mid - 1;
}
return dima;
}
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f >> n;
best[1] = a[1] = 1;
for(int i = 1; i <= n; ++i)
{
f >> v[i];
int poz = bin_Search(v[i]);
ant[i] = a[poz];
best[i] = poz + 1;
a[poz + 1] = i;
if(maxim < best[i])
{
maxim = best[i];
pozz = i;
}
if(poz + 1 > dima)
dima = poz + 1;
}
g << maxim << '\n';
int dim = 0;
int i;
for(i = pozz; ant[i] > 0; i = ant[i])
sol[++dim] = v[i];
g << v[i] << " ";
for(int i = dim; i >= 1; --i)
g << sol[i] << " ";
}