Pagini recente » Cod sursa (job #368159) | Cod sursa (job #2675258) | Cod sursa (job #188752) | Cod sursa (job #810929) | Cod sursa (job #1693057)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
int my_bsearch(int v[], int key, int l, int r)
{
while (r - l > 1) {
int m = l + (r - l) / 2;
if (v[m] >= key)
r = m;
else
l = m;
}
return r;
}
int main()
{
ifstream in("scmax.in");
ofstream out("scmax.out");
int n;
in >> n;
int nums[n];
for (int i = 0; i < n; i++) {
in >> nums[i];
}
int len = 1;
int seqTable[n];
memset(seqTable, 0, n);
seqTable[0] = nums[0];
for (int i = 1; i < n; i++) {
if (nums[i] < seqTable[0])
seqTable[0] = nums[i];
else if (nums[i] > seqTable[len - 1])
seqTable[len++] = nums[i];
else
//int ix = my_bsearch(seqTable, nums[i], -1, len - 1);
seqTable[my_bsearch(seqTable, nums[i], -1, len - 1)] = nums[i];
}
out << len << "\n";
for (int i = 0; i < len; i++) {
out << seqTable[i] << " ";
}
in.close();
out.close();
return 0;
}