Pagini recente » Cod sursa (job #543486) | Cod sursa (job #1606855) | Cod sursa (job #2248563) | Cod sursa (job #2755070) | Cod sursa (job #1864242)
#include<cstdio>
#define NMAX 100000
using namespace std;
int a[NMAX], b[NMAX], n, m;
inline int BSearch(int x)
{
int left, right, mid;
left = 0; right = m-1;
while(left <= right)
{
mid = left+((right-left) >> 1);
if(b[mid] < x) left = mid + 1;
else right = mid - 1;
}
return left;
}
void solve()
{
int i, poz;
b[0] = a[0];
m = 1;
for(i=1; i<n; i++)
if(a[i] > b[m-1])
b[m++] = a[i];
else
{
poz = BSearch(a[i]);
b[poz] = a[i];
}
}
int main()
{
int i;
FILE *fin, *fout;
fin = fopen("scmax.in","r");
fout = fopen("scmax.out","w");
fscanf(fin,"%d",&n);
for(i=0; i<n; i++)
fscanf(fin,"%d",&a[i]);
fclose(fin);
solve();
fprintf(fout,"%d\n",m);
for(i=0; i<m; i++)
fprintf(fout,"%d ",b[i]);
return 0;
}