Pagini recente » Cod sursa (job #324131) | Cod sursa (job #918471) | Cod sursa (job #2936470) | Cod sursa (job #2444654) | Cod sursa (job #1096195)
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N, a[100005], prec[100005], dad[100005], bestlg=1;
void print(const int &x)
{
if (x!=0)
print(dad[x]), g<<a[x]<<' ';
}
void scm()
{
prec[1]=1;
for (int i=2; i<=N; ++i)
{
int st=1, dr=bestlg;
while (st<=dr)
{
int mij=(st+dr)>>1;
if (a[i]>a[prec[mij]]) st=mij+1;
else dr=mij-1;
}
if (st>bestlg) ++bestlg;
prec[st]=i; dad[i]=prec[st-1];
}
}
int main()
{
f>>N;
for (int i=1; i<=N; ++i)
f>>a[i];
scm();
g<<bestlg<<'\n';
print(prec[bestlg]);
return 0;
}