Pagini recente » Cod sursa (job #658654) | Cod sursa (job #56387) | Cod sursa (job #1726838) | Cod sursa (job #2917957) | Cod sursa (job #2530036)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100005],n,last;
int aux[100005];
int prev[100005];
int cautare(int st, int dr, int val)
{
if(st>dr)
return 0;
int m=(st+dr)/2;
if(a[aux[m]] < val)
return max(m,cautare(m+1,dr, val));
else return cautare( st, m-1, val );
}
void print(int poz)
{
if(prev[poz]!=0) print(prev[poz]);
fout<<a[poz]<<" ";
}
int main()
{
fin>>n;
int x;
for(int i=1; i<=n; ++i)
fin>>a[i];
for(int i=1; i<=n; ++i)
if(a[i]>a[aux[last]])
{
aux[++last]=i;
prev[i]=aux[last-1];
}
else
{
x=cautare(1,last,a[i]);
aux[x+1]=i;
prev[i]=aux[x];
}
fout<<last<<"\n";
print(aux[last]);
//fout<<a[last];
return 0;
}