); memset(c, 0, sizeof(c)); memset(s, 0, sizeof(s)); for(i=1; i<=n; ++i) ADD(i, 1); int l=1, r=n; int x,y,z; int flag = 0; for(int k=0; k
(r-l+1)); int mid; if(flag) mid = r-y; else mid = l+y-1; int ll = mid-l+1; int rr = r-mid; if(ll<=rr){ for(i=l; i<=mid; ++i) ADD(2*mid+1-i, s[i]); l = mid+1; } else{ for(i=mid+1; i<=r; ++i) ADD(2*mid+1-i, s[i]); r = mid; } flag ^= fg; //标记,如果左边长,那么就向左叠,并且从右向左读; //如果左边短,那么就向右叠,并且从左向右读。 } else{ scanf(%d%d, &y,&z); if(flag) printf(%d , getsum(r-y)-getsum(r-z)); else printf(%d , getsum(l+z-1)-getsum(l+y-1)); } } return 0; }
?