Pagini recente » Cod sursa (job #582037) | Cod sursa (job #3136851) | Cod sursa (job #1542354) | Cod sursa (job #2264231) | Cod sursa (job #3208026)
#include <bits/stdc++.h>
using namespace std;
const int dim=1e5+5;
int n,a[dim],len,dp[dim],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 st=1,dr=len,p=-1;
while(st<=dr){
int mid=(st+dr)/2;
if(dp[mid]>=a[i]){
dr=mid-1;
p=mid;
}
else{
st=mid+1;
}
}
if(p!=-1){
dp[p]=a[i];
poz[i]=p;
}
}
}
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;
}