Pagini recente » Cod sursa (job #192772) | Cod sursa (job #1360366) | Cod sursa (job #878081) | Cod sursa (job #1144953) | Cod sursa (job #481956)
Cod sursa(job #481956)
#include <cstdio>
#include <cstdlib>
FILE *fin=fopen("scmax.in","r");
FILE *fout=fopen("scmax.out","w");
int v[100000];
int q[100000];
int p[100000];
int nq;
int cautbin(int val, int n)
{
int pi=0;
int pf=n-1;
while (pi<=pf)
{
int m = (pi+pf)/2;
if (v[q[m]]<val)
pi=m+1;
else
pf=m-1;
}
return pf+1;
}
int main (int argc, char * const argv[]) {
int n;
fscanf(fin, "%d", &n);
nq=0;
for (int i=0; i<n; i++)
{
fscanf(fin, "%d", &v[i]);
int poz = cautbin(v[i],nq);
if (poz>=nq)
nq=poz+1;
q[poz] = i;
p[i]= poz;
}
fprintf(fout, "%d\n",nq);
int i=n-1;
int onq=nq;
while ((nq)&&(i>=0))
{
if (p[i]==nq)
q[--nq]=i;
i--;
}
for (int i=0; i<onq; i++)
fprintf(fout, "%d ",v[q[i]]);
fclose(fin);
fclose(fout);
return 0;
}