Pagini recente » Cod sursa (job #1680950) | Cod sursa (job #1852599) | Cod sursa (job #39030) | Cod sursa (job #2240668) | Cod sursa (job #792776)
Cod sursa(job #792776)
#include <cstdio>
#define LGMAX 100003
using namespace std;
FILE *inFile = fopen ("scmax.in", "r");
FILE *outFile = fopen ("scmax.out", "w");
int n;
int a[LGMAX];
int res[LGMAX];
void read()
{
fscanf (inFile, "%d\n", &n);
for (int i = 1; i <= n; ++i)
fscanf (inFile, "%d ", &a[i]);
}
void solve()
{
res[0] = res[1] = 1;
for (int i = 2; i <= n; ++i)
{
int left = 1;
int right = res[0];
while (left <= right)
{
int mid = ((right - left) >> 1) + left;
if (a[i] > a[res[mid]])
left = mid + 1;
else
right = mid - 1;
}
if (left > res[0])
++res[0];
res[left] = i;
}
}
void print()
{
fprintf (outFile, "%d\n", res[0]);
for (int i = 1; i <= res[0]; ++i)
fprintf (outFile, "%d ", a[res[i]]);
}
int main()
{
read();
solve();
print();
return 0;
}