Pagini recente » Cod sursa (job #1843949) | Cod sursa (job #3120470) | Cod sursa (job #2684418) | Cod sursa (job #3217035) | Cod sursa (job #2456984)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[100003], best[100003], p[100003], maxim, k, L[100003], nr;
void afis(int i)
{
if (p[i] > 0) afis(p[i]);
g<<v[i]<<" ";
}
int bs(int val)
{
int st=0;
int dr=nr;
int mij;
int rasp=0;
while(st<=dr)
{mij=(st+dr)/2;
if(v[L[mij]]<val) {st=mij+1;rasp=mij;}
else {dr=mij-1;}
}
return rasp;
}
int main()
{
int i, j, poz;
nr = 1;
f>>n;;
for (i = 1; i <= n; i++) f>>v[i];
best[1] = L[1] = 1; L[0] = 0;
for (i = 2; i <= n; i++)
{
poz=bs(v[i]);
L[poz+1]=i;
best[i]=poz+1;
p[i]=L[poz];
if(poz+1>nr) nr=poz+1;
}
maxim = 0; poz = 0;
for (i = 1; i <= n; i++)
if (maxim < best[i])
{
maxim = best[i]; poz = i;
}
g<<maxim<<'\n';
afis(poz);
return 0;
}