Pagini recente » Cod sursa (job #2784228) | Cod sursa (job #1209346) | Cod sursa (job #2387665) | Cod sursa (job #2971743) | Cod sursa (job #667420)
Cod sursa(job #667420)
#include<fstream>
using namespace std;
int v[100004], a[100004], b[100004];
int lung, n;
ofstream fout("scmax.out");
int caut_binar(int i)
{
int mij,st=1,dr=lung,lmax=0;
while(st<=dr)
{
mij=st+ (dr-st)/2;
if(v[a[mij]]<v[i])
{
lmax=mij;
st=mij+1;
}
else
dr=mij-1;
}
return lmax;
}
void dp()
{
lung=1;
a[1]=1;
for(int i=2;i<=n;++i)
{
int j=caut_binar(i);
if(!a[j+1])
{
a[j+1]=i;
++lung;
}
else
if(v[a[j+1]]>v[i])
a[j+1] = i;
b[i]=a[j];
}
}
void write(int i)
{
if(b[i])
write(b[i]);
fout<<v[i]<<" ";
}
int main()
{
ifstream fin("scmax.in");
fin>>n;
for(int i=1;i<=n;++i)
fin>>v[i];
dp();
fout<<lung<<"\n";
write(a[lung]);
}