Pagini recente » Cod sursa (job #2205552) | Cod sursa (job #658624) | Cod sursa (job #883392) | Cod sursa (job #2083994) | Cod sursa (job #2906415)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int caut(vector<int> V, int t, int c1, int c2)
{
int ans = 0;
while (c2 >= c1)
{
int m = (c1 + c2) / 2;
if (t > V[m])
c1 = m + 1;
else
{
c2 = m - 1;
ans = m;
}
}
if (t <= V[ans])
return ans;
else
return -1;
}
int main()
{
int n, h;
in>> n;
vector<int> v(n), Lmin, sir;
for (int i = 0; i < n; i++)
in>> v[i];
Lmin.push_back(v[0]);
int nr = 1;
for (int i = 1; i < n; i++)
{
int poz = caut(Lmin, v[i], 0, nr - 1);
if (poz == -1)
{
Lmin.push_back(v[i]);
nr++;
h = i;
sir = Lmin;
}
else
Lmin[poz] = v[i];
}
out<< nr << "\n";
int l, c1 = 0, c2 = 1;
vector<int> Min;
for (int i = 0; i <= h; i++)
if (v[i] <= v[h])
Min.push_back(v[i]);
l = Min.size();
for (int i = 0; i < l && c2 < nr; i++)
{
if (Min[i] >= sir[c1] && Min[i] <= sir[c2])
{
out<< Min[i] << " ";
c1++;
c2++;
}
}
out<< v[h];
return 0;
}