#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 111111; int T, L, n; int sum[maxn<<2]; void build(int rt, int l, int r) { sum[rt] = 0; if (l == r) return ; int m = (l + r) >> 1; build(rt << 1, l, m); build(rt << 1 | 1, m + 1, r); } void update(int rt, int l, int r, int p, int val) { if (l == p && r == p) { sum[rt] += val; return ; } int m = (l + r) >> 1; if (p <= m) update(rt << 1, l, m, p, val); else update(rt << 1 | 1, m + 1, r, p, val); sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } int querySum(int rt, int l, int r, int L, int R) { if (L <= l && R >= r) return sum[rt]; int m = (l + r) >> 1; int ret = 0; if (L <= m) ret += querySum(rt << 1, l, m, L, R); if (R > m) ret += querySum(rt << 1 | 1, m + 1, r, L, R); return ret; } int queryPos1(int rt, int l, int r, int s) { if (l == r) return l; int m = (l + r) >> 1; if (sum[rt<<1] >= s) return queryPos1(rt << 1, l, m, s); return queryPos1(rt << 1 | 1, m + 1, r, s - sum[rt<<1]); } int queryPos2(int rt, int l, int r, int s) { if (l == r) return l; int m = (l + r) >> 1; if (sum[rt<<1|1] >= s) return queryPos2(rt << 1 | 1, m + 1, r, s); return queryPos2(rt << 1, l, m, s - sum[rt<<1|1]); } int main() { scanf("%d", &T); for (int cas = 1; cas <= T; ++cas) { int dir = 1, curp = 0; __int64 ans = 0; int op, pp; scanf("%d %d", &L, &n); build(1, 0, L); for (int i = 0; i < n; ++i) { scanf("%d", &op); if (op == 0) { scanf("%d", &pp); update(1, 0, L, pp, 1); } else { if (sum[1] == 0) continue; int s1 = querySum(1, 0, L, 0, curp); int s2 = querySum(1, 0, L, curp, L); if (s1 == 0) { int p2 = queryPos2(1, 0, L, s2); ans += p2 - curp; curp = p2; dir = 1; update(1, 0, L, curp, -1); } else if (s2 == 0) { int p1 = queryPos1(1, 0, L, s1); ans += curp - p1; curp = p1; dir = 0; update(1, 0, L, curp, -1); } else { int p1 = queryPos1(1, 0, L, s1); int p2 = queryPos2(1, 0, L, s2); /*if (p1 == curp || p2 == curp) { update(1, 0, L, curp, -1); continue; }*/ if (curp - p1 < p2 - curp) { ans += curp - p1; curp = p1; dir = 0; update(1, 0, L, curp, -1); } else if (curp - p1 > p2 - curp) { ans += p2 - curp; curp = p2; dir = 1; update(1, 0, L, curp, -1); } else { ans += p2 - curp; if (dir == 1) { curp = p2; update(1, 0, L, curp, -1); } else { curp = p1; update(1, 0, L, curp, -1); } } } } } printf("Case %d: %I64d\n", cas, ans); } return 0; }