Pagini recente » Cod sursa (job #951852) | Cod sursa (job #2521378) | Cod sursa (job #762583) | Cod sursa (job #293472) | Cod sursa (job #2424767)
#include <bits/stdc++.h>
#define N 100003
using namespace std;
int n, a[N], lg[N], poz[N], maxim, k, L[N], nr;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
void afis(int i)
{
if (poz[i] > 0)
afis(poz[i]);
fout<<a[i]<<" ";
}
int caut(int x)
{
int p=0, u=nr, m=(p+u)/2;;
while (p <= u)
{
if (a[L[m]] < x && a[L[m+1]] >= x)
return m;
else if (a[L[m+1]] < x)
p = m + 1;
else
u = m - 1;
m = (p + u)/2;
}
return nr;
}
int main()
{
int i, j, p;
fin>>n;
for (i=1; i<=n; i++)
fin>>a[i];
lg[1] = L[1] = 1;
cout<<"\n------------------------- "<<2<< " \n";
nr = 1;
for(i=2; i<=n; ++i)
{
p = caut(a[i]);// cauta binar in a[] cu indicii lui L[
poz[i] = L[p];
lg[i] = p + 1;
L[p + 1] = i;
if (nr < p + 1)
nr = p + 1;
cout<<"p: "<<p;
cout<<"\na[i] : "<<a[i];
cout<<"\na[p] : "<<a[p];
cout<<"\n------------------------- "<<i+1<< " \n";
}
maxim = 0;
p = 0;
for (i = 1; i <= n; i++)
if (maxim < lg[i])
{
maxim = lg[i];
p = i;
}
fout<<maxim<<"\n";
afis(p);
return 0;
}