#include #include #include using namespace std; struct info{ int s; int x; int t; }; const int MAX = 50010; int N,x,t; char str[20]; info a[MAX]; int b[MAX]; int ans; struct interval{ int left, right; int sum, rsum; }; struct SegmentTree{ static const int MAX = 50010; interval node[MAX<<3]; #define ls(o) (o<<1) #define rs(o) (o<<1|1) void build(int l, int r, int o){ node[o].left = l; node[o].right = r; node[o].sum = node[o].rsum = 0; if(l == r) return; int mid = (l + r)>>1; build(l,mid,ls(o)); build(mid+1,r,rs(o)); } void pushup(int o){ node[o].sum = node[rs(o)].sum + node[ls(o)].sum; node[o].rsum = max(node[rs(o)].rsum,node[ls(o)].rsum + node[rs(o)].sum); } void update(int value,int pos,int o){ if(node[o].left == node[o].right && node[o].left == pos){ node[o].sum = node[o].rsum = value; return ; } int mid = (node[o].left + node[o].right) >> 1; if(pos <= mid) update(value,pos,ls(o)); else update(value,pos,rs(o)); pushup(o); } void getans(int v,int o){ if(node[o].left == node[o].right){ ans = b[node[o].left]; return; } if(v + node[rs(o)].rsum > 0) getans(v,rs(o)); else getans(v + node[rs(o)].sum,ls(o)); } void query(int &v,int L, int R, int o){ if(~ans) return; if(L <= node[o].left && R >= node[o].right){ if(v + node[o].rsum <= 0) v += node[o].sum; else getans(v,o); return; } int mid = (node[o].left + node[o].right) >> 1; if(R > mid) query(v,L,R,rs(o)); if(L <= mid) query(v,L,R,ls(o)); } }; SegmentTree tree; int main(void) { int cas = 1; while(scanf("%d", &N),N){ for(int i = 0 ; i < N; ++i){ scanf("%s",str); if(str[1] == 'u'){ a[i].s = 1; scanf("%d", &a[i].x); } else if(str[1] == 'o') a[i].s = 2; else a[i].s = 3; scanf("%d", &a[i].t); b[i] = a[i].t; } sort(b,b + N); for(int i = 0 ; i < N; ++i) a[i].t = lower_bound(b, b + N, a[i].t) - b + 1; memset(b,0,sizeof(b)); for(int i = 0 ; i < N; ++i) if(a[i].s == 1) b[a[i].t] = a[i].x; printf("Case #%d:\n",cas++); tree.build(1,N,1); for(int i = 0 ; i < N; ++i){ if(a[i].s == 1) tree.update(1,a[i].t,1); else if(a[i].s == 2) tree.update(-1,a[i].t,1); else{ int v =0; ans = -1; tree.query(v,1,a[i].t,1); printf("%d\n",ans); } } } return 0; }