Pagini recente » Cod sursa (job #2679623) | Cod sursa (job #238702) | Cod sursa (job #576104) | Cod sursa (job #750155) | Cod sursa (job #49773)
Cod sursa(job #49773)
#include <stdio.h>
int n, v[5001], a[5001], next[5001], rez, ok;
void print(int pos);
int main()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
int i, min, mid, max, cnt, sol, j;
scanf("%d", &n);
for(i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
}
a[0] = 0;
v[0] = -1000001;
a[1] = 1;
cnt = 1;
for(i = 2; i <= n; ++i)
{
min = 0;
max = cnt;
sol = cnt;
while(min <= max)
{
mid = (min + max) >> 1;
if(v[a[mid]] <= v[i])
{
min = mid + 1;
sol = mid;
}
else
{
max = mid - 1;
}
}
a[sol + 1] = i;
next[a[sol]] = i;
if(sol + 1 > cnt)
cnt = sol + 1;
/*
for(j = 1; j <= cnt; ++j)
{
printf("%d ", v[a[j]]);
}
printf("\n");
*/
}
print(a[1]);
printf("%d\n", rez);
ok = 1;
print(a[1]);
return 0;
}
void print(int pos)
{
if(pos)
{
++rez;
if(ok)
printf("%d ", pos);
print(next[pos]);
}
}