Pagini recente » Cod sursa (job #2330923) | Cod sursa (job #2818390) | Cod sursa (job #1263954) | Cod sursa (job #1162005) | Cod sursa (job #2166391)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100010],ant[100010],poz[100010],ok,n,i,j,k,s,d,mij;
void afisare(int q)
{
if(q!=0)
{
afisare(ant[q]);
fout<<a[q]<<' ';
}
}
int main()
{
fin>>n;
for(i=1; i<=n; i++)
fin>>a[i];
k=1;
poz[1]=1;
ant[1]=0;
for(i=2; i<=n; i++)
{
if(a[i]>a[poz[k]])
{
k++;
poz[k]=i;
ant[i]=poz[k-1];
}
else
{
if (a[poz[1]]>=a[i])
{
poz[1]=i;
ant[i]=0;
}
else
{
s=2;
d=k;
ok=0;
while(s<=d&&ok==0)
{
mij=(d-s)/2+s;
if(a[i]>a[poz[mij-1]]&&a[i]<=a[poz[mij]])
{
poz[mij]=i;
ant[i]=poz[mij-1];
ok=1;
}
else
{
if(a[i]<a[poz[mij]])
d=mij-1;
else
s=mij+1;
}
}
}
}
}
fout<<k<<'\n';
afisare(poz[k]);
}