Pagini recente » Cod sursa (job #533485) | Cod sursa (job #305337) | Cod sursa (job #1621673) | Cod sursa (job #502626) | Cod sursa (job #1739809)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,m[100001],p[100001],k[100001],a[100001],nr,poz;
int cauta(int poz)
{
int l=1;
int r=nr;
int mid=1;
while(l<=r)
{
mid=(l+r)/2;
if(a[poz]<m[mid]) r=l-1;
else r=l+1;
}
return l;
}
void print(int i)
{
if(i==0) return;
print(p[i]);
fout<<a[i]<<" ";
}
int main()
{
fin>>n; fin>>a[1];
m[1]=a[1];
p[1]=0;
k[1]=1;
for(i=2;i<=n;++i)
{
fin>>a[i];
}
nr=1;
for(i=2;i<=n;++i)
{
if(a[i]>m[nr]){++nr; m[nr]=a[i]; p[i]=k[nr-1]; k[nr]=i;}
else if(a[i]!=m[nr])
{
poz=cauta(i);
m[poz]=a[i];
p[i]=k[nr-1];
k[nr]=i;
}
}
print (k[nr]);
return 0;
}