Pagini recente » Cod sursa (job #1777819) | Cod sursa (job #478700) | Cod sursa (job #846790) | Cod sursa (job #2025809) | Cod sursa (job #571089)
Cod sursa(job #571089)
#include<fstream>
using namespace std;
fstream f1, f2;
int a[100001], b[100001], c[100001], n;
int i, lmax, lc;
int bs(int b[100001], int l, int h, int v)
{
int p;
while (l<=h)
{
p=(l+h)/2;
if (v<a[b[p]])l=p+1;
else h=p-1;
}
return l;
}
int main()
{
f1.open("scmax.in",ios::in);
f2.open("scmax.out",ios::out);
f1>>n;
for (i=1;i<=n;i++) f1>>a[i];
lmax=0;b[0]=0;
for (i=n;i>=1;i--)
{
lc=bs(b,1,lmax,a[i]);
c[i]=b[lc-1];
if (lc>lmax){lmax=lc; b[lmax]=i;}
else if (a[b[lc]]<a[i])b[lc]=i;
}
f2<<lmax<<"\n";
for (i=b[lmax];i!=0;i=c[i])
{
f2<<a[i]<<" ";
}
f1.close();
f2.close();
return 0;
}