using namespace std; const long long kMaxO = 100001; long long kT, kQ, kMod; long long kOp, kX, kN; long long kMul[kMaxO<<2]; void (long long rt) { kMul[rt] = ((kMul[rt<<1] % kMod) * (kMul[rt<<1|1] % kMod))% kMod; } void BuildTree(long long l, long long r, long long rt) { if(l == r) { kMul[rt] = 1; return ; } long long mid = (l + r) >> 1; BuildTree(l, mid, rt<<1); BuildTree(mid + 1, r, rt<<1|1); PushUp(rt); } long long QueryTree(long long left, long long right, long long l, long long r, long long rt) { if(left <= l && right <= r) return kMul[rt]; long long mid = (l + r) >> 1; long long ret = 1; if(left <= mid) ret *= QueryTree(left, right, l, mid, rt << 1); if(right > mid) ret *= QueryTree(left, right, mid+1, r, rt << 1 | 1); return ret; } void UpdateTree(long long loc, long long val, long long l, long long r, long long rt) { if(l == r){ kMul[rt] = val % kMod; return ; } long long mid = (l + r) >> 1; if(loc <= mid) UpdateTree(loc, val, l, mid, rt << 1); else UpdateTree(loc, val, mid + 1, r, rt << 1 | 1); PushUp(rt); } int main() { scanf("%lld", &kT); for(long long case_id = 1; case_id <= kT; ++case_id) { kX = 1; scanf("%lld%lld", &kQ, &kMod); printf("Case #%lld:n", case_id); BuildTree(1, kQ, 1); for(long long i = 1; i <= kQ; ++i) { scanf("%d%d", &kOp, &kN); if(kOp == 1) UpdateTree(i, kN, 1, kQ, 1); else UpdateTree(kN, 1, 1, kQ, 1); kX = kMul[1]; printf("%lldn", kX); } } return 0; }
|
近期评论