社区讨论

线段树 WA 0pt 求调

P3372【模板】线段树 1参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhju7k6i
此快照首次捕获于
2025/11/04 08:35
4 个月前
此快照最后确认于
2025/11/04 08:35
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define N 1000005
#define oor(x,y,X,Y) ((x) > (Y) || (X) > (y))
#define ir(x,y,X,Y) ((y) <= (Y) && (X) <= (x))
int tree[N],tag[N],r[N],g[N];
void init(int l,int r,int val)
{
    tree[val] = g[r] - g[l - 1];
    if(l < r)
    {
        init(l,(l + r) >> 1,(val << 1));
        init(((l + r) >> 1) + 1,r,(val << 1) + 1);
    }
}
void push(int l,int r,int _l,int _r,int val,int now)
{
    //cout << l << " " << r << " " << _l << " " << _r << endl;
    if(oor(l,r,_l,_r)) return;
    if(ir(l,r,_l,_r))
    {
        tag[now] += val;
        return;
    }
    if(l < r)
    {
        push(l,(l + r) >> 1,_l,_r,val,(now << 1));
        push(((l + r) >> 1) + 1,r,_l,_r,val,(now << 1) + 1);
    }
}
void pushdown(int now,int l,int r)
{
    tag[(now << 1)] += tag[now];
    tag[(now << 1) + 1] += tag[now];
    tree[now] += tag[now] * (r - l + 1);
    tag[now] = 0;
}
int query(int l,int r,int _l,int _r,int now)
{
    //cout << l << " " << r << endl;
    int ans = 0;
    if(tag[now] > 0) pushdown(now,l,r);
    if(oor(l,r,_l,_r)) return 0;
    if(ir(l,r,_l,_r))
    {
        //cout << tree[now] << "$" << endl;
        return tree[now];
    }
    ans += query(l,(l + r) >> 1,_l,_r,(now << 1));
    ans += query(((l + r) >> 1) + 1,r,_l,_r,(now << 1) + 1);
    //cout << ans << "$" << endl;
    return ans;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        cin >> r[i];
        g[i] = g[i - 1] + r[i];
    }
    init(1,n,1);
    //cout << "!!!\n";
    for(int i = 1; i <= m; i++)
    {
        int op,x,y,k;
        cin >> op >> x >> y;
        if(op == 1)
        {
            cin >> k;
            push(1,n,x,y,k,1);
        }
        else cout << query(1,n,x,y,1) << '\n';
        //cout << "坠!机!!!\n";
    }
    return 0;
}
代码0分,求调

回复

3 条回复,欢迎继续交流。

正在加载回复...