Pagini recente » Cod sursa (job #2473320) | Cod sursa (job #2536853) | Cod sursa (job #1580027) | Cod sursa (job #3205296) | Cod sursa (job #2250673)
#include <bits/stdc++.h>
using namespace std;
int values[100001];
int dp[100001], position[100001], sol[100001], lastEl[100001];
int final, size1 = 0;
int binarSearch(int x, int n){
int position = 0;
for (int power = 20; power >= 0 ; power --){
if (position + (1 << power) <= n && dp[position + (1 << power)] < x){
position += (1 << power);
}
}
return position;
}
vector <int> solution;
int main() {
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
f >> n;
for (int i = 1; i <= n; i++){
f >> values[i];
}
int bestRight = 0;
for (int i = 1; i <= n; i++){
final = binarSearch(values[i], bestRight);
dp[final + 1] = values[i];
position[final + 1] = i;
lastEl[i] = position[final];
bestRight = max(bestRight, final + 1);
}
g << bestRight << "\n";
int elements = position[bestRight];
while(elements){
solution.push_back(elements);
elements = lastEl[elements];
}
reverse(solution.begin(), solution.end());
for (auto x : solution){
g << values[x] << " ";
}
return 0;
}