Pagini recente » Cod sursa (job #2689051) | Cod sursa (job #3217391) | Cod sursa (job #2217082) | Cod sursa (job #805291) | Cod sursa (job #2630348)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> vec, poz, dp;
void Adaugare(int x)
{
int inc = 0;
int sf = dp.size() - 1;
while (inc <= sf)
{
int mid = (inc + sf) / 2;
if (dp[mid] < x)
{
inc = mid + 1;
}
else
{
sf = mid - 1;
}
}
if (inc >= (int)dp.size())
{
dp.push_back(x);
poz.push_back(inc);
}
else
{
dp[inc] = x;
poz.push_back(inc);
}
}
int main()
{
int n;
fin >> n;
vec.resize(n + 1);
for (int i = 0; i < n; i++)
{
fin >> vec[i];
Adaugare(vec[i]);
}
int NrCautat = dp.size() - 1;
vector<int> Sir;
for (int i = poz.size() - 1; i >= 0; i--)
{
if (poz[i] == NrCautat)
{
Sir.push_back(vec[i]);
NrCautat--;
}
}
fout << dp.size() << '\n';
for (int x = Sir.size() - 1; x >= 0; x--)
{
fout << Sir[x] << ' ';
}
}
/*
6
2 5 7 3 4 1
*/