Pagini recente » Cod sursa (job #2727643) | Cod sursa (job #964498) | Cod sursa (job #2527215) | Cod sursa (job #2739268) | Cod sursa (job #3154486)
#include <iostream>
#include <fstream>
using namespace std;
const int dim=1e5+5;
int n,a[dim],dp[dim],len,poz[dim],pozf[dim];
int main(){
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(int i=1;i<=n;i++){
f>>a[i];
}
for(int i=1;i<=n;i++){
if(a[i]>dp[len]){
dp[++len]=a[i];
poz[i]=len;
}
else{
int left=1,right=len,sol=-1;
while(left<=right){
int mid=(left+right)/2;
if(dp[mid]>=a[i]){
sol=mid;
right=mid-1;
}
else{
left=mid+1;
}
}
if(sol!=-1){
dp[sol]=a[i];
poz[i]=sol;
}
}
}
g<<len<<'\n';
int j=n;
for(int i=len;i>=1;i--){
while(poz[j]!=i){
j--;
}
pozf[i]=j;
}
for(int i=1;i<=len;i++){
g<<a[pozf[i]]<<' ';
}
return 0;
}