Pagini recente » Cod sursa (job #3344435) | Cod sursa (job #3338647) | Cod sursa (job #3302353) | Cod sursa (job #3350251) | Cod sursa (job #3326193)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001];
int sir[100001];
int L[100001];
int main (){
int n;
fin >> n;
for (int i = 1; i<=n; i++){
fin >> v[i];
}
int nr = 1;
sir[1] = v[1];
L[1] = 1;
int maxi = 1;
int index_max = 1;
vector<int> sol;
for (int i = 2; i <= n; i++)
{
int st = 1;
int dr = nr;
int rez = 0;
while (st <= dr)
{
int mid = (st + dr) / 2;
if(sir[mid] < v[i])
{
rez = mid;
st = mid + 1;
}
else{
dr = mid - 1;
}
}
if(rez == nr){
nr++;
}
sir[rez + 1] = v[i];
L[i] = rez + 1;
if(L[i] > maxi){
maxi = L[i];
index_max = i;
}
}
fout << maxi << "\n";
for (int i = index_max; i > 0; i--){
if(L[i] == maxi){
sol.push_back(v[i]);
maxi--;
}
}
reverse(sol.begin(), sol.end());
for (auto i: sol){
fout << i << " ";
}
}