Pagini recente » Cod sursa (job #3285098) | Cod sursa (job #2913567) | Cod sursa (job #1731553) | Cod sursa (job #2046101) | Cod sursa (job #552502)
Cod sursa(job #552502)
#include <stdio.h>
#define MAX 100002
int A[MAX], L[MAX], T[MAX], S[MAX];
int N;
void Citire()
{
FILE *fin = fopen("scmax.in", "r");
fscanf(fin, "%d", &N);
int i;
for (i=1; i<=N; ++i)
fscanf(fin, "%d", &A[i]);
fclose(fin);
}
int cautare_bin(int x, int low, int high)
{
if (low > high)
return low-1;
if (x < A[S[low]])
return low-1;
if (x > A[S[high]])
return high;
int mid = (low+high)/2;
if (A[S[mid]] == x)
return mid - 1;
if (x < A[S[mid]])
cautare_bin(x, low, mid);
else
cautare_bin(x, mid+1, high);
}
void afisare(FILE *fout, int poz)
{
if (poz == 0)
return;
afisare(fout, T[poz]);
fprintf(fout, "%d ", A[poz]);
}
int main()
{
Citire();
int len=0;
int i, poz;
S[0] = 0;
for (i=1;i<=N;++i)
{
poz=cautare_bin(A[i], 1, len);
S[poz+1] = i;
T[i] = S[poz];
L[i] = poz+1;
if (poz == len)
++len;
}
FILE *fout = fopen("scmax.out", "w");
fprintf(fout, "%d\n", len);
afisare(fout, S[len]);
fclose(fout);
return 0;
}