Pagini recente » Borderou de evaluare (job #3367500) | Monitorul de evaluare | Borderou de evaluare (job #3366507) | Cod sursa (job #3366489) | Cod sursa (job #3366814)
#include <fstream>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int A[DIM],dp[DIM],tata[DIM],n,m;
void drum(int i){
if(i!=0){
drum(tata[i]);
fout<<A[i]<<" ";
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>A[i];
m=1;
dp[1]=1;
for(int i=2;i<=n;i++){
int st=1,dr=m,mid;
while(st<=dr){
mid=st+(dr-st)/2;
if(A[dp[mid]]<A[i])
st=mid+1;
else
dr=mid-1;
}
if(st>m){
m++;
dp[m]=i;
}
else
dp[st]=i;
tata[i]=dp[st-1];
}
fout<<m<<endl;
drum(dp[m]);
return 0;
}