Pagini recente » Cod sursa (job #1290407) | Cod sursa (job #861742) | Cod sursa (job #693950) | Cod sursa (job #2770935) | Cod sursa (job #2759147)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 1e5 + 1;
int n, v[N], dp[N], k, num[N], ans[N], aux;
int main(){
f >> n;
for(int i = 0; i < n; i++)
f >> v[i];
f.close();
for(int i = 0; i < n; i++){
if(v[i] > num[k]){
num[++k] = v[i];
dp[i] = k;
}else{
int st = 1, dr = k, m, poz = k + 1;
while(st <= dr){
m = (st + dr) / 2;
if(num[m] >= v[i])
poz = m, dr = m - 1;
else
st = m + 1;
}
num[poz] = v[i];
dp[i] = poz;
}
}
g << k << '\n';
aux = k;
for(int i = n; i >= 0; i--){
if(dp[i] == aux)
ans[aux--] = v[i];
}
for(int i = 1; i <= k; i++)
g << ans[i] << ' ';
g.close();
}