求调,样例都没过,不知道哪里的问题
查看原帖
求调,样例都没过,不知道哪里的问题
981994
xinglili楼主2024/8/4 15:36
#include<bits/stdc++.h>
using namespace std;

char c;
int n,m,tree1[2050][2050],tree2[2050][2050],tree3[2050][2050],tree4[2050][2050];

int lowbit(int x)
{
    return x&-x;
}

void add(int x,int y,int val,int tree[][2050])
{
    for(int i=x;i<=n;i+=lowbit(i))
        for(int j=y;j<=m;j+=lowbit(j))tree[i][j]+=val;
}

int ask(int x,int y,int tree[][2050])
{
    int res=0;
    for(int i=x;i>0;i-=lowbit(i))
        for(int j=y;j>0;j-=lowbit(j))res+=tree[i][j];
    return res;
}

void add2(int a,int b,int val)
{
    add(a,b,val,tree1);
    add(a,b,a*val,tree2);
    add(a,b,b*val,tree3);
    add(a,b,a*b*val,tree4);
}

int ask2(int a,int b)
{
    return (n+1)*(m+1)*ask(a,b,tree1)-(m+1)*ask(a,b,tree2)-(n+1)*ask(a,b,tree3)+ask(a,b,tree4);
}

int main()
{
    cin>>c>>n>>m;
    
    char q;
    while(cin>>q)
    {
        if(q=='L')
        {
            int a,b,c,d,val;
            cin>>a>>b>>c>>d>>val;
            add2(a,b,val);
            add2(a,d+1,-val);
            add2(c+1,b,-val);
            add2(c+1,d+1,val);
        }
        else
        {
            int a,b,c,d;
            cin>>a>>b>>c>>d;
            cout<<ask2(c,d)-ask2(c,b-1)-ask2(a-1,d)+ask2(a-1,b-1)<<endl;
        }
    }
}
2024/8/4 15:36
加载中...