Pagini recente » Cod sursa (job #3238988) | Cod sursa (job #2919662) | Cod sursa (job #592705) | Cod sursa (job #91000) | Cod sursa (job #3039422)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
int n, v[100001], w[100001], l[100001], k, poz, lmax, ant[100001], valori[100001], cnt;
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
{
fin >> v[i];
}
w[1] = 1;
l[1] = 1;
k = 1;
for(int i = 2; i <= n; i++)
{
int st = 1;
int dr = k;
poz = 0;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(v[i] <= v[w[mid]])
{
dr = mid - 1;
poz = mid;
}
else
st = mid + 1;
}
if(!poz)
{
ant[i] = w[k];
w[++k] = i;
l[i] = k;
}
else
{
ant[i] = w[poz - 1];
w[poz] = i;
l[i] = poz;
}
lmax = max(lmax, l[i]);
}
fout << lmax << "\n";
for(int i = 1; i <= n; i++)
{
if(lmax == l[i])
{
poz = i;
break;
}
}
valori[++cnt] = v[poz];
while(ant[poz])
{
poz = ant[poz];
valori[++cnt] = v[poz];
}
for(int i = cnt; i > 0; i--)
fout << valori[i] << " ";
}