Pagini recente » Cod sursa (job #2873642) | Cod sursa (job #2830326) | Cod sursa (job #2182677) | Cod sursa (job #789511) | Cod sursa (job #546823)
Cod sursa(job #546823)
// SCMAX N log N
#include <fstream>
#include <vector>
using namespace std;
#define maxN 100005
long long x[maxN];
int best[maxN], dim, poz[maxN], maxim, N, ant[maxN], pozz;
vector < int > sol;
int bin_Search(int st, int dr, int z)
{
int mid;
while(st < dr)
{
mid = (st + dr) / 2;
if(x[poz[mid]] > z)
dr = mid;
if(x[poz[mid]] <= z)
st = mid + 1;
}
mid = (st + dr) / 2;
if(x[poz[mid]] >= z)
--mid;
return mid;
}
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f >> N;
for (int i = 1; i <= N; ++ i)
{
f >> x[i];
int p = bin_Search(0, dim, x[i]);
poz[p + 1] = i;
best[i] = p + 1;
ant[i] = poz[p];
if (p + 1 > dim)
dim = p + 1;
if (best[i] > maxim)
{
maxim = best[i];
pozz = i;
}
}
g << maxim << '\n';
sol.push_back(x[pozz]);
for (int i = pozz; ant[i] != 0; i = ant[i])
sol.push_back(x[ant[i]]);
for (int i = sol.size() - 1; i >= 0; -- i)
g << sol[i] << " ";
}