计算二维前缀和,节省时间。容斥定理。
代码:
#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; } }
如果觉得有帮助,点个推荐啦~