Pagini recente » Cod sursa (job #2801230) | Cod sursa (job #3156455) | Istoria paginii runda/ichb-scoala-2014-10 | Cod sursa (job #2128137) | Cod sursa (job #1937747)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int NMAX = 100005;
int arr[NMAX], best[NMAX], p[NMAX], length = 1, N;
int get_position (int x) {
int pos = 0;
int left = 1, right = x;
while (left <= right) {
int mid = left + (right - left)/2;
if (arr[best[mid]] < arr[x]) {
pos = mid;
left = mid + 1;
}
else right = mid - 1;
}
return pos;
}
void print (int x) {
if (x == 0)
return;
print (p[x]);
out << arr[x] << " ";
}
int main()
{
in >> N;
for (int i = 1; i <= N; ++ i) {
in >> arr[i];
}
arr[0] = 2e9 + 2;
for (int i = 1; i <= N; ++ i) {
int position = get_position (i);
best[position + 1] = i;
p[i] = best[position];
}
while (best[length]) {
length ++ ;
}
out << length - 1 << '\n';
print (best[length - 1]);
}