1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define MAXN 10010 5 int tree[MAXN<<2],ca=1; 6 inline void PushUp(int rt) 7 { 8 tree[rt]=min(tree[rt<<1],tree[rt<<1|1]); 9 } 10 void Build(int L,int R,int rt) 11 { 12 if(L==R) 13 scanf("%d",&tree[rt]); 14 else 15 { 16 int mid=(L+R)>>1; 17 Build(L,mid,rt<<1); 18 Build(mid+1,R,rt<<1|1); 19 PushUp(rt); 20 } 21 } 22 void Add(int x,int val,int L,int R,int rt) 23 { 24 if(L==R) 25 tree[rt]+=val; 26 else 27 { 28 int mid=(L+R)>>1; 29 if(x<=mid) 30 Add(x,val,L,mid,rt<<1); 31 else 32 Add(x,val,mid+1,R,rt<<1|1); 33 PushUp(rt); 34 } 35 } 36 void Update(int val,int L,int R,int rt) 37 { 38 if(L==R) 39 tree[rt]+=val; 40 else 41 { 42 int mid=(L+R)>>1; 43 if(tree[rt]==tree[rt<<1]) 44 Update(val,L,mid,rt<<1); 45 else 46 Update(val,mid+1,R,rt<<1|1); 47 PushUp(rt); 48 } 49 } 50 void Query(int L,int R,int rt) 51 { 52 if(L==R) 53 printf("Case %d: %d %d\n",ca++,L,tree[rt]); 54 else 55 { 56 int mid=(L+R)>>1; 57 if(tree[rt]==tree[rt<<1]) 58 Query(L,mid,rt<<1); 59 else 60 Query(mid+1,R,rt<<1|1); 61 } 62 } 63 int main() 64 { 65 int n,t,q,a,b; 66 scanf("%d",&t); 67 while(t--) 68 { 69 scanf("%d",&n); 70 Build(1,n,1); 71 scanf("%d",&q); 72 while(q--) 73 { 74 scanf("%d%d",&a,&b); 75 if(a) 76 Add(a,b,1,n,1); 77 else 78 Update(b,1,n,1); 79 } 80 Query(1,n,1); 81 } 82 return 0; 83 }