二维树状数组单点改区间查求调
  • 板块题目总版
  • 楼主_H17_
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/4/14 10:45
  • 上次更新2024/4/14 13:18:28
查看原帖
二维树状数组单点改区间查求调
743014
_H17_楼主2024/4/14 10:45
#include<bits/stdc++.h>
#define int long long 
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N=1<<12+1;
int n,m,q,a[N][N];
void add(int x,int y,int k){
	int by=y;
    while(x<=n){
    	y=by;
        while(y<=n)
            a[x][y]+=k,y+=lowbit(y);
        x+=lowbit(x);
    }
    return;
}
int qry(int x,int y){
    int ans=0,by=y;
    for(;x;x-=lowbit(x)){
        for(y=by;y;y-=lowbit(y))
            ans+=a[x][y];
	}
    return ans;
}
int qry(int l1,int r1,int l2,int r2){
    return qry(l2,r2)-qry(l1-1,r2)-qry(l2,r1-1)+qry(l1-1,r1-1);
}
signed main(){
    cin>>n>>m;
    int op,a,b,c,d;
    while(cin>>op>>a>>b){
        if(op==1){
            cin>>c;
            add(a,b,c);
        }
        else{
            cin>>c>>d;
            cout<<qry(a,b,c,d)<<'\n';
        }
    }
    return 0;
}

题目在这里 https://loj.ac/p/133

2024/4/14 10:45
加载中...