计算二维前缀和,节省时间。容斥定理。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <ostream>
using namespace std;
long long mp[2002][2002];
int n,q,x,y,w,a,b,c,d;
int main()
{
    cin>>n;
    for(int i = 0;i < n;i ++)
    {
        cin>>x>>y>>w;
        mp[x + 1][y + 1] += w;
    }
    for(int i = 1;i <= 2001;i ++)
    {
        for(int j = 1;j <= 2001;j ++)
        {
            mp[i][j] += mp[i - 1][j] + mp[i][j - 1] - mp[i - 1][j - 1];
        }
    }
    cin>>q;
    for(int i = 0;i < q;i ++)
    {
        cin>>a>>b>>c>>d;
        cout<<(mp[c + 1][d + 1] - mp[c + 1][b] - mp[a][d + 1] + mp[a][b])<<endl;
    }
}