Pagini recente » Cod sursa (job #227080) | Cod sursa (job #1606612) | Cod sursa (job #2714570) | Cod sursa (job #2353898) | Cod sursa (job #1514619)
#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 = 1; i <= sequence; i += 1)
tata << v[i] << " ";
return 0;
}