/*题意:给出n个数x1,x2...xn.进行m次操作,每次给出一个区间[l ,r].求出xi属于区间[l, r]使得该区间的每个数与xi的差之和最小,并求出该和。解决方法:划分树。*/
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=200010;
int tree[20][MAXN];
int sorted[MAXN];
int toLeft[20][MAXN];
long long sum[20][MAXN];
void build(int level,int left,int right){
if(left==right){
sum[level][left]=tree[level][left];
return;
}
int mid=(left+right)>>1;
int suppose=mid-left+1;
for(int i=left;i<=right;i++){
if(tree[level][i]<sorted[mid])
suppose--;
sum[level][i]=tree[level][i];
if(i>left)sum[level][i]+=sum[level][i-1];
}
int lpos=left;
int rpos=mid+1;
for(int i=left;i<=right;i++){
if(tree[level][i]<sorted[mid])
{
tree[level+1][lpos++]=tree[level][i];
}
else if(tree[level][i]==sorted[mid]&&suppose>0)
{
tree[level+1][lpos++]=tree[level][i];
suppose--;
}
else tree[level+1][rpos++]=tree[level][i];
toLeft[level][i]=toLeft[level][left-1]+lpos-left;
}
build(level+1,left,mid);
build(level+1,mid+1,right);
}
long long ans;
int query(int level,int left,int right,int qleft,int qright,int k){
if(qleft==qright)return tree[level][qleft];
int mid=(left+right)>>1;
int cnt=toLeft[level][qright]-toLeft[level][qleft-1];
int ss=toLeft[level][qleft-1]-toLeft[level][left-1];
int ee=qleft-left-ss;
int s=toLeft[level][qright]-toLeft[level][qleft-1];
int e=qright-qleft+1-s;
if(cnt>=k){
if(e>0){
if(ee>0)ans+=sum[level+1][mid+e+ee]-sum[level+1][mid+ee];
else ans+=sum[level+1][mid+e];
}
int newl=left+toLeft[level][qleft-1]-toLeft[level][left-1];
int newr=newl+cnt-1;
return query(level+1,left,mid,newl,newr,k);
}
else{
if(s>0){
if(ss>0) ans-=sum[level+1][left+ss+s-1]-sum[level+1][left+ss-1];
else ans-=sum[level+1][left+s-1];
}
int newr=qright+toLeft[level][right]-toLeft[level][qright];
int newl=newr-(qright-qleft-cnt);
return query(level+1,mid+1,right,newl,newr,k-cnt);
}
}
int main(){
int T;
int n,m;
scanf("%d",&T);
int iCase=0;
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&tree[0][i]);
sorted[i]=tree[0][i];
}
sort(sorted+1,sorted+1+n);
build(0,1,n);
printf("Case #%d:\n",++iCase);
scanf("%d",&m);
while(m--){
int ql,qr,k;
scanf("%d%d",&ql,&qr);
++ql,++qr;
ans=0;
k=(qr-ql)/2+1;
int tmp=query(0,1,n,ql,qr,k);
if((qr-ql+1)%2==0) ans-=tmp;
printf("%I64d\n",ans);
}
printf("\n");
}
return 0;
}