回复 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; }