Pagini recente » Cod sursa (job #354806) | Monitorul de evaluare | Cod sursa (job #321947) | Istoria paginii runda/qwertyu/clasament | Cod sursa (job #1528984)
#include <fstream>
#define NR 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int bst[NR],L[NR],ant[NR],nr,a[NR],n,poz;
void afis(int x)
{
if(x==0)
return;
afis(ant[x]);
fout<<a[x]<<' ';
}
int caut(int x)
{
int st=0,dr=nr,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[L[mij]]<x && a[L[mij+1]]>=x) return mij;
if(a[L[mij]]<x) st=mij+1;
else
dr=mij-1;
}
return nr;
}
int main()
{
fin>>n>>a[1];
bst[1]=1; L[1]=1; nr=1;
for(int i=2;i<=n;i++)
{
fin>>a[i];
poz = caut(a[i]);
bst[i]=poz+1;
ant[i]=L[poz];
L[poz+1]=i;
if(poz+1>nr) nr=poz+1;
}
fout<<nr<<'\n';
afis(L[nr]);
return 0;
}