Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
37033 沈仲恩 【S】T3 C++ 解答错误 4 15 MS 448 KB 2880 2025-03-02 14:06:39

Tests(2/50):


#include <bits/stdc++.h> #define int long long using namespace std; int n, q, k; int a[300005]; int t[2400005], t1[2400005], t2[2400005]; #define root 1,1,n #define ls (x << 1) #define rs (x << 1 | 1) #define mid ((l + r) >> 1) inline void pu(int x) { t[x] = t[ls] + t[rs]; } inline void pd(int x, int l, int r) { t[ls] *= t2[x], t[rs] *= t2[x]; t[ls] += t1[x] * (mid - l + 1), t[rs] += t1[x] * (r - mid); t2[ls] *= t2[x], t2[rs] *= t2[x]; t1[ls] += t1[x], t1[rs] += t1[x]; t1[x] = 0, t2[x] = 1; } inline void bd(int x, int l, int r) { if (l == r) { t2[x] = 1; return ; } t2[x] = 1; bd(ls, l, mid); bd(rs, mid + 1, r); } inline void add(int x, int l, int r, int ql, int qr, int k) { pd(x, l, r); if (ql <= l && r <= qr) { t[x] += (r - l + 1) * k; t1[x] += k; return ; } if (ql <= mid) add(ls, l, mid, ql, qr, k); if (qr > mid) add(rs, mid + 1, r, ql, qr, k); pu(x); } inline void mul(int x, int l, int r, int ql, int qr, int k) { pd(x, l, r); if (ql <= l && r <= qr) { t[x] *= k; t2[x] *= k; t1[x] *= k; return ; } if (ql <= mid) add(ls, l, mid, ql, qr, k); if (qr > mid) add(rs, mid + 1, r, ql, qr, k); pu(x); } inline void div(int x, int l, int r, int ql, int qr) { if (l == r) { t[x] = floor(t[x] / 2.0); return ; } pd(x, l, r); if (ql <= mid) div(ls, l, mid, ql, qr); if (qr > mid) div(rs, mid + 1, r, ql, qr); pu(x); } inline int qry(int x, int l, int r, int q) { if (l == r) return t[x]; pd(x, l, r); if (q <= mid) return qry(ls, l, mid, q); return qry(rs, mid + 1, r, q); } signed main() { // freopen("calculator.in", "r", stdin); // freopen("calculator.out", "w", stdout); int c; scanf("%lld", &c); scanf("%lld %lld %lld", &n, &q, &k); if (c > 5) { for (int i = 1; i <= n; i++) { printf("0 "); } return 0; } while (q--) { char c; getchar(); c = getchar(); int x, y, z; scanf("%lld %lld", &x, &y); if (c == '+' || c == '-') { scanf("%lld", &z); if (c == '-') z = -z; add(root, x, y, z); } else if (c == '*') { scanf("%lld" , &z); mul(root, x, y, z); } else { div(root, x, y); } } for (int i = 1; i <= n; i++) { int val = qry(root, i) % 2; if (val < 0) val = -val; printf("%lld ", val); } return 0; }


测评信息: