回复 127楼 czz5242199
Thank You,我原来是忘记0了。

编程之路定要走完……
程序代码:#include<stdio.h>
#define MAX_RANGE 500000
#define MAX_FN 7
struct
{
int L, R;
int max[MAX_FN];
int min[MAX_FN];
int il, ir;
} ST[MAX_RANGE * 2];
int FL, FR, K;
void build_tree(int L, int R, int root)
{
static int ip = MAX_RANGE + 1;
int i;
ST[root].L = L;
ST[root].R = R;
i = (L + R) >> 1;
if(i == L) ST[root].il = L; else build_tree(L, i, ST[root].il = ip++);
if(i + 1 == R) ST[root].ir = R; else build_tree(i + 1, R, ST[root].ir = ip++);
for(i = 0; i < MAX_FN; i++)
{
ST[root].max[i] = ST[ST[root].il].max[i] > ST[ST[root].ir].max[i] ? ST[ST[root].il].max[i] : ST[ST[root].ir].max[i];
ST[root].min[i] = ST[ST[root].il].min[i] < ST[ST[root].ir].min[i] ? ST[ST[root].il].min[i] : ST[ST[root].ir].min[i];
}
}
void init()
{
int i, j, t;
ST[1].L = ST[1].R = 1;
for(i = 0; i < MAX_FN; i++) ST[1].max[i] = ST[1].min[i] = 2;
for(i = 2; i <= MAX_RANGE; i++)
{
ST[i].L = ST[i].R = i;
if(!ST[i].il)
for(j = i + i; j <= MAX_RANGE; ST[j].il++, j += i) ST[j].max[ST[j].il] = ST[j].min[ST[j].il] = i + j;
for(t = i + i, j = ST[i].il; j < MAX_FN; j++) ST[i].max[j] = ST[i].min[j] = t;
}
build_tree(1, MAX_RANGE, 0);
}
void search(int L, int R, int root)
{
if(L > ST[root].R || R < ST[root].L) return;
if(L <= ST[root].L && R >= ST[root].R)
{
if(FL > ST[root].min[K]) FL = ST[root].min[K];
if(FR < ST[root].max[K]) FR = ST[root].max[K];
return;
}
if(L < ST[root].L) L = ST[root].L;
if(R > ST[root].R) R = ST[root].R;
search(L, R, ST[root].il);
search(L, R, ST[root].ir);
}
void output(int L, int R)
{
FL = MAX_RANGE * 2;
FR = 1;
K = K > MAX_FN ? MAX_FN - 1 : K - 1;
search(L, R, 0);
printf("%d %d\n", FL, FR);
}
int main()
{
int n, Li, Ri;
init();
for(scanf("%d", &n); n--; output(Li, Ri))
scanf("%d%d%d", &Li, &Ri, &K);
return 0;
}

程序代码:#include<stdio.h>
#include<math.h>
int main()
{
double ln[1001], a[10000], b[10000], ra, rb, mr, tr;
int n, k, mi, i, j;
for(i = 10; i <= 1000; i++) ln[i] = log(i);
for(; scanf("%d%d", &n, &k) != EOF; printf("%.3lf\n", mr))
{
for(i = 0; i < n; a[i++] = ln[j]) scanf("%d", &j);
for(i = 0; i < n; b[i++] = ln[j]) scanf("%d", &j);
for(ra = rb = i = 0; i < k; i++) ra += a[i], rb += b[i];
for(mr = ra / rb; i < n; ra -= a[mi], a[mi] = a[i], rb -= b[mi], b[mi] = b[i], i++)
for(ra += a[i], rb += b[i], mi = i, j = 0; j < k; j++)
if((tr = (ra - a[j]) / (rb - b[j])) > mr) mr = tr, mi = j;
}
return 0;
}

程序代码:#include <stdio.h>
int main()
{
int n;scanf("%d ", &n);
int ch, i;
while (n--)
{
i = 0;
while ((ch = getchar()) != '\n')
{
i += ch >> 7 & 1;
}
printf("%d\n", i / 2);
}
return 0;
}