Pagini recente » Cod sursa (job #3250259) | Cod sursa (job #1314516) | Cod sursa (job #245675) | Cod sursa (job #349217) | Cod sursa (job #2419963)
#include <bits/stdc++.h>
#define Nmax 100000
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int N;
int A[1 + Nmax + 5];
int Poz[1 + Nmax + 5];
int Last[1 + Nmax + 5];
vector < int > Answers;
int length = 0;
inline int binarySearch (int value)
{
int answer = 0;
int pow = 1 << 18;
while (pow)
{
if (answer + pow <= length && A[Poz[answer + pow]] < A[value])
answer += pow;
pow >>= 1;
}
return answer;
}
int main()
{
Last[1] = 0;
int left = 1;
fin >> N;
for (int i = 1; i <= N; ++i)
{
fin >> A[i];
int poz = binarySearch (i);
Poz[1 + poz] = i;
Last[i] = Poz[poz];
if (poz + 1 > length)
length = poz + 1, left = i;
}
fout << length << "\n";
while (left)
Answers.push_back (left), left = Last[left];
for (int i = Answers.size () - 1; 0 <= i; --i)
fout << A[Answers[i]] << " ";
return 0;
}