Pagini recente » Cod sursa (job #446652) | Cod sursa (job #1609441) | Cod sursa (job #2632549) | Cod sursa (job #1672272) | Cod sursa (job #886500)
Cod sursa(job #886500)
#include<fstream>
#include<string.h>
using namespace std;
const int MAX_N = 100002;
const int INF = 0x3f3f3f3f;
int N, Max, p;
int a[ MAX_N ], st[ MAX_N ], P[ MAX_N ], sol[ MAX_N ];
inline int bs(int x)
{
int left = 0, mid = 0, right = Max + 1;
while(left < right)
{
mid = (left + right) / 2;
if(st[mid] >= x)
right = mid;
else left = mid + 1;
}
return left;
}
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f >> N;
for(int i = 1; i <= N; ++i)
f >> a[i];
memset(st, INF, sizeof(st));
st[0] = 0;
for(int i = 1; i <= N; ++i)
{
p = bs(a[i]);
st[p] = a[i];
P[i] = p;
if(p > Max)
Max = p;
}
int j = N, k = 0;
for(int i = Max; i; --i)
{
while(P[j] != i)
--j;
++k, sol[k] = a[j];
}
g << Max << '\n';
for(int i = 1; i < Max; ++i)
g << sol[i] << " ";
g << sol[Max] << '\n';
f.close();
g.close();
}