Pagini recente » Cod sursa (job #2716513) | Cod sursa (job #3003264) | Cod sursa (job #1353737) | Cod sursa (job #1913791) | Cod sursa (job #2139332)
//la ce m-am gandit eu...
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100010],from,Max,n,poz,capat_idxsi[100010],inapoi[100010],x,idx,i;
int bagam_binara(int x,int stg,int drt)
{
int mijl=0;
while(stg<drt)
{
mijl=(stg+drt)/2;
if(x<=v[capat_idxsi[mijl]])
{
drt=mijl;
}
else
{
stg=mijl+1;
}
}
return stg;
}
void aff(int from)
{
if(inapoi[from]!=0)
aff(inapoi[from]);
fout<<v[from]<<" ";
}
int main()
{
fin>>n;
for(i=1;i<=n;++i)
{
fin>>v[i];
}
capat_idxsi[1]=1;
from=1;
inapoi[1]=0;
idx=1;
for(i=2;i<=n;++i)
{
if(v[capat_idxsi[idx]]<v[i])
{
++idx;
capat_idxsi[idx]=i;
inapoi[i]=capat_idxsi[idx-1];
from=i;
}
else
{
if(v[capat_idxsi[1]]>v[i])
{
capat_idxsi[1]=i;
inapoi[i]=0;
//inapoi[i]=0;
}
else
{
poz=bagam_binara(v[i],1,idx);
capat_idxsi[poz]=i;
inapoi[i]=capat_idxsi[poz-1];
//best[i]=poz;
}
}
}
fout<<idx<<"\n";
aff(from);
/*for(i=1;i<=n;++i)
{
if(best[i]>Max)
{
fout<<v[i]<<" ";
Max=best[i];
}
}*/
return 0;
}