分块WA求助
查看原帖
分块WA求助
1210473
ytezwsw_xjy楼主2025/1/24 09:07
#include <iostream>
#include <cmath>

using namespace std;

const int maxn = 1e5+5;

int n, m, opt1;
int a[maxn];
int belong[maxn];
int siz[maxn];
int sum[maxn];
int delta[maxn];
int ans = 0;

int main() {
    cin >> n >> m >> opt1;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int s = sqrt(n);
    for (int i = 1; i <= n; i++) {
        belong[i] = (i - 1) / s + 1;
    }
    for (int i = 1; i <= n; i++) {
        sum[belong[i]] += a[i];
        siz[belong[i]]++;
    }
    for (int i = 1; i <= m; i++) {
        int opt;
        cin >> opt;

        if (opt == 2) {
            int l, r, v;
            cin >> l >> r >> v;
            if (belong[l] == belong[r]) {
                for (int j = l; j <= r; j++) {
                    a[j] += v;
                    sum[belong[j]] += v;
                }
            } else {
                for (int j = l; belong[j] == belong[l]; j++) {
                    a[j] += v;
                    sum[belong[j]] += v;
                }
                for (int j = belong[l] + 1; j < belong[r]; j++) {
                    delta[j] += v;
                    sum[j] += siz[j] * v;
                }
                for (int j = r; belong[j] == belong[r]; j--) {
                    a[j] += v;
                    sum[belong[j]] += v;
                }
            }
        } else if (opt == 1) {
            int l, r, v;
            cin >> l >> r >> v;
            if (belong[l] == belong[r]) {
                for (int j = l; j <= r; j++) {
                    a[j] *= v;
                    sum[belong[j]] *= v;
                }
            } else {
                for (int j = l; belong[j] == belong[l]; j++) {
                    a[j] *= v;
                    sum[belong[j]] *= v;
                }
                for (int j = belong[l] + 1; j < belong[r]; j++) {
                    delta[j] *= v;
                    sum[j] *= v * siz[j];
                }
                for (int j = r; belong[j] == belong[r]; j--) {
                    a[j] *= v;
                    sum[belong[j]] *= v;
                }
            }
        } else {
            int l, r;
            cin >> l >> r;
            ans = 0;
            if (belong[l] == belong[r]) {
                for (int j = l; j <= r; j++) {
                    ans = (ans + a[j] + delta[belong[j]]) % opt1;
                }
            } else {
                for (int j = l; belong[j] == belong[l]; j++) {
                    ans = (ans + a[j] + delta[belong[j]]) % opt1;
                }
                for (int j = belong[l] + 1; j < belong[r]; j++) {
                    ans = (ans + sum[j] + delta[j] * siz[j]) % opt1;
                }
                for (int j = r; belong[j] == belong[r]; j--) {
                    ans = (ans + a[j] + delta[belong[j]]) % opt1;
                }
            }
            cout << ans << endl;
        }
    }

    return 0;
}

样例过了,但WA

2025/1/24 09:07
加载中...