Pagini recente » Cod sursa (job #1175616) | Cod sursa (job #2225996) | Cod sursa (job #385778) | Cod sursa (job #1343404) | Cod sursa (job #2635461)
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
long long v[100004],t[100004],r[100004],vf[100004];
long long n,i,len,st,dr,mij,elem;
int main()
{
fin>>n;
for(i=1;i<=n;i++) fin>>v[i];
len=1;
t[1]=1;
for(i=2;i<=n;i++)
{
if(v[i]>v[t[len]])
{
len++;
t[len]=i;
r[i]=t[len-1];
}
else
{
st= 1;
dr = len;
while (st < dr)
{
int mij = (st + dr) / 2;
if (v[i] > v[t[mij]])
{st = mij + 1;
}
else
dr = mij;
}
mij=st;
t[mij]=i;
r[i]=t[mij-1];
}
}
fout<<len<<'\n';
int poz,k=0;
poz=t[len];
while(poz!=0)
{
k++;
vf[k]=v[poz];
poz=r[poz];
}
for(i=k;i>=1;i--) fout<<vf[i]<<" ";
fout<<'\n';
return 0;
}