Pagini recente » Cod sursa (job #2976700) | Cod sursa (job #1571003) | Cod sursa (job #2643037) | Cod sursa (job #539430) | Cod sursa (job #49960)
Cod sursa(job #49960)
#include <stdio.h>
#define MAX 6000
int n, a[MAX], v[MAX];
int st, dr, mijl, L, last;
bool found;
int main()
{
FILE *fin = fopen("subsir2.in", "r");
fscanf(fin, "%d", &n);
for (int i = 1; i <= n; ++i)
fscanf(fin, "%d", &a[i]);
fclose(fin);
for (int i = 1; i <= n; ++i)
{
st = 1;
dr = L;
found = false;
while (st <= dr)
{
mijl = (st + dr) / 2;
if (a[ v[mijl] ] <= a[i])
{
st = mijl + 1;
last = mijl;
found = true;
}
else
dr = mijl - 1;
}
if (!found)
last = 0;
if (last == L || a[i] <= a[ v[last+1] ])
{
v[last+1] = i;
if (L < last + 1)
L = last + 1;
}
}
FILE *fout = fopen("subsir2.out", "w");
fprintf(fout, "%d\n", L);
for (int i = 1; i <= L; ++i)
fprintf(fout, "%d ", v[i]);
fclose(fout);
return 0;
}