Pagini recente » Cod sursa (job #175952) | Cod sursa (job #464718) | Cod sursa (job #2077488) | Rating Marius Petcu (Petcu_Marius_322CC) | Cod sursa (job #3215052)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int N = 1e5;
int a[N + 1];
vector <int> ans, poz, sol;
int n, len;
int main()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> a[i];
ans.push_back(a[1]);
poz.push_back(0);
for (int i = 2; i <= n; ++i)
{
vector <int> :: iterator it = lower_bound(ans.begin(), ans.end(), a[i]);
int pos = it - ans.begin(); //da nr de la lowerbound
if (it == ans.end()) ///Daca nu avem numar >=
ans.push_back(a[i]);
else ///Altfel
*it = a[i]; //schimb chiar pointer-ul
poz.push_back(pos); //pastrez pozitia
}
fout << ans.size() << '\n';
int len = ans.size() - 1;
//ans = 12 15 19
/* for (int i = poz.size() - 1; i >= 0 && len >= 0; --i)
{
if (poz[i] != len)
continue;
sol.push_back(i + 1);
len--;
}
for(int i=0; i<n; i++)
cout<<poz[i]<<' ';
cout<<'\n';
*/
// reverse (sol.begin(), sol.end()); ///
for (int it : ans)
fout << it<< ' ';
return 0;
}