Pagini recente » Cod sursa (job #2463792) | Cod sursa (job #682236) | Cod sursa (job #2118090) | Cod sursa (job #2674359) | Cod sursa (job #2137809)
//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;
//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;
}