Pagini recente » Istoria paginii jc2018/runda-2 | Cod sursa (job #3292698) | Cod sursa (job #2595165) | Cod sursa (job #1356258) | Cod sursa (job #1514597)
#include <fstream>
#include <iostream>
const int MAXN = 1000000;
using namespace std;
int N;
int v[2000];
int seq[2000];
int sequence;
int subseq;
int s[MAXN];
int r[MAXN];
int find_position(int el)
{
int temp;
int index;
for (temp = 1; temp <= sequence; temp <<= 1);
for (index = 0; temp; temp >>= 1)
if (index + temp <= sequence and v[index + temp] < el)
index += temp;
return index;
}
int insert_element(int el)
{
int pos;
pos = find_position(el);
if (el == v[pos + 1])
return -1;
v[pos + 1] = el;
if (not pos)
seq[pos + 1] = ++subseq;
else
seq[pos + 1] = seq[pos];
if (pos == sequence)
++sequence;
return pos + 1;
}
int main()
{
ifstream mama("scmax.in");
ofstream tata("scmax.out");
mama >> N;
seq[0] = 1;
for (int x, i = 0; i < N; i += 1)
{
mama >> r[i];
x = insert_element(r[i]);
if (x != -1)
s[i] = seq[x];
}
tata << sequence << '\n';
for (int i = 0; i < N; i += 1)
if (s[i] == seq[sequence])
tata << r[i] << " ";
return 0;
}