关于 LOJ AC 洛谷 RE
查看原帖
关于 LOJ AC 洛谷 RE
779995
VividCycle楼主2022/10/15 19:54

LOJ 上对应的题是 6281. 虽然我知道 LOJ 的数据比这个弱得多,but still.

数组已经开大了。

RE 似乎出现在 a[j] = sqrt(a[j]); 这里。

#include <iostream>
#include <cmath>
using namespace std;
long long a[100005], summ[100005]; bool flag[100005];

int main() {
    long long n, bl=200, opt, l, r, c, ans=0, m; cin >> n;
    for (int i=1; i<=n; i++) {cin >> a[i]; summ[(i-1)/bl] += a[i];} cin >> m;
    for (int i=1; i<=m; i++) {
        cin >> opt >> l >> r;
        if (opt) {
            ans = 0;
            for (int j=(l-1)/bl+1; j<=(r-1)/bl-1; j++) ans += summ[j];
            for (int j=l; (j-1)/bl == (l-1)/bl && j <= r; j++) ans += a[j];
            for (int j=r; (j-1)/bl == (r-1)/bl && (l-1)/bl != (r-1)/bl; j--) ans += a[j];
            cout << ans << endl;
            continue;
        }
        for (int j=(l-1)/bl+1; j<=(r-1)/bl-1; j++) {
            if (flag[j]) continue;
            flag[j] = true;
            for (int k=j*bl+1; j == (k-1)/bl; k++) {
                summ[j] -= a[k]; a[k] = sqrt(a[k]); summ[j] += a[k];
                flag[j] &= (a[k] <= 1);
            }
        }
        for (int j=l; (j-1)/bl == (l-1)/bl && j <= r; j++) {
            summ[(j-1)/bl] -= a[j]; a[j] = sqrt(a[j]); summ[(j-1)/bl] += a[j];
        }
        for (int j=r; (j-1)/bl == (r-1)/bl && (l-1)/bl != (r-1)/bl; j--) {
            summ[(j-1)/bl] -= a[j]; a[j] = sqrt(a[j]); summ[(j-1)/bl] += a[j];
        }
    }
    return 0;
}
2022/10/15 19:54
加载中...