Pagini recente » Cod sursa (job #123057) | Cod sursa (job #828317) | Cod sursa (job #1667729) | Cod sursa (job #2331231) | Cod sursa (job #3346738)
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,M,v[NMAX],dp[NMAX],pred[NMAX];
void citire()
{
fin>>N;
for(int i=1; i<=N; i++)
{
fin>>v[i];
}
}
void refacere_drum(int x)
{
if(pred[x])
{
refacere_drum(pred[x]);
}
fout<< v[x] << " ";
}
int main()
{
citire();
for(int i=1; i<=N; i++)
{
int p1,p2,pmijl,ans;
p1=1;
p2=M;
ans=M+1;
while(p1<=p2)
{
pmijl=(p1+p2)/2;
if(v[dp[pmijl]]>=v[i])
{
ans=pmijl;
p2=pmijl-1;
}
else
{
p1=pmijl+1;
}
}
dp[ans]=i;
pred[i]=dp[ans-1];
if(ans>M)
{
M=ans;
}
}
fout<< M << "\n";
refacere_drum(dp[M]);
return 0;
}