/**[统计]hunnu 10571 Counting Girls#树状数组command 0--60 x插入x1 x删除x2 x询问x的个数3 x询问第x大4 x,y 询问[x,y]区间个数5 x,y 询问[xth,yth]大的平均数6 询问数组大小用树状数组需要注意,输入的x可能为0,这里把所有的x处理成了x+1其次,题目描述坑爹,输入的x应该是小于200000*/#include <stdio.h>#include <string.h>using namespace std;#define N 200002#define lowbit(i) (i & -i)__int64 s[N],r[N];void add(int i,int c,__int64 *arr){ for(; i < N; i += lowbit(i)) arr[i] += c;}__int64 sum(int i,__int64 *arr){ __int64 ans = 0LL; for(; i > 0; i -= lowbit(i)) ans += arr[i]; return ans;}int total;int getK(int x){ int l = 1,rr = N - 1,mid; while(l < rr) { mid = ( l + rr) >> 1; if(sum(mid,r) < x ) l = mid + 1; else rr = mid; } return rr;}int main(){ int n,t,com,x,y; int s1,s2; __int64 ss; scanf("%d",&t); while(t--) { scanf("%d",&n); total = 0; memset(s,0,sizeof(s)); memset(r,0,sizeof(r)); while(n--) { scanf("%d",&com); switch(com){ case 0 : scanf("%d",&x); ++x; add(x,x,s); add(x,1,r); ++total; break; case 1 : scanf("%d",&x); ++x; add(x,-x,s); add(x,-1,r); --total; break; case 2 : scanf("%d",&x); ++x; printf("%I64d\n",sum(x,r) - sum(x-1,r)); break; case 3 : scanf("%d",&x); x = total - x + 1; printf("%d\n",getK(x) - 1); break; case 4 : scanf("%d%d",&x,&y); printf("%I64d\n",sum(y+1,r) - sum(x,r)); break; case 5 : scanf("%d%d",&x,&y); x = total - x + 1; y = total - y + 1; s1 = getK(x); s2 = getK(y); if(s1 == s2) { printf("%d.00\n",s1 - 1); break; } ss = sum(s1,s) - sum(s2-1,s) - x + y - 1; if(sum(s2,r) - sum(s2 -1,r) > 1) ss -= (y - sum(s2-1,r) - 1) * s2; if(sum(s1,r) - sum(s1 -1,r) > 1) ss -= (sum(s1,r) - x) * s1; printf("%.2lf\n",ss * 1.0 / (x - y + 1.0)); break; default : printf("%d\n",total); break; } } } return 0;}