Pagini recente » Cod sursa (job #131992) | Cod sursa (job #326138) | Cod sursa (job #557077) | Cod sursa (job #1973637) | Cod sursa (job #1335651)
#include <cstdio>
#define NMAX 100009
using namespace std;
FILE * fin=fopen("scmax.in", "r");
FILE * fout=fopen ("scmax.out", "w");
struct vec
{
int val, poz;
};
int n;
int lg;
int sol[NMAX];
vec a[NMAX];
void rez ();
int cautbinar(int st, int dr, int el);
int main()
{
rez();
return 0;
}
int cautbinar(int st, int dr, int el)
{
int mij;
while(st<dr)
{
mij=(st+dr)/2;
if(el==sol[mij])
return mij;
else if(el>sol[mij])
st=mij+1;
else dr=mij+1;
}
return st;
}
void rez ()
{
int i, aux;
fscanf(fin, "%d\n", &n);
for(i=1; i<=n; ++i)
{
fscanf(fin, "%d ", &a[i].val);
if(a[i].val>sol[lg])
{
++lg;
sol[lg]=a[i].val;
a[i].poz=lg;
}
else
{
aux=cautbinar(1, lg, a[i].val);
sol[aux]=a[i].val;
a[i].poz=aux;
}
}
aux=lg;
fprintf(fout, "%d\n", lg);
for(i=n; aux; --i)
if(a[i].poz==aux)
{
sol[aux]=a[i].val;
--aux;
//fprintf(fout, "%d ", a[i].val);
}
for(i=1; i<=lg; ++i)
fprintf(fout, "%d ", sol[i]);
}