Pagini recente » Monitorul de evaluare | Cod sursa (job #304872) | Cod sursa (job #738749) | Profil Luca_Chirila | Cod sursa (job #3154489)
#include <bits/stdc++.h>
using namespace std;
int n;
int dp[100000];
int v[100000], len[100000];
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int main()
{
in >> n;
for(int i = 1; i <= n; i ++){
in >> v[i];
}
int dpPos = 1;
dp[1] = v[1];
for(int i = 1; i <= n; i ++){
int l = 0,r = dpPos;
while(l <= r){
int mij = (l + r) / 2;
if(v[i] > dp[mij]){
l = mij + 1;
}
else{
r = mij - 1;
}
}
if(l == dpPos + 1)
dpPos ++;
dp[l] = v[i];
len[i] = l;
}
out << dpPos << endl;
for(int i = 1; i <= dpPos; i ++){
out << dp[i] << " ";
}
return 0;
}