D 牛妹吃豆子 二维差分

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=2e3+1;
 5 ll sum[maxn][maxn],cnt[maxn][maxn],ans[maxn][maxn];
 6 char s[maxn][maxn];
 7 int main()
 8 {
 9     int n,m,k,q,x1,x2,y1,y2;
10     scanf("%d%d%d%d",&n,&m,&k,&q);
11     for(int i=1;i<=k;++i)
12     {
13         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
14         cnt[x1][y1]++,cnt[x2+1][y1]--,cnt[x1][y2+1]--,cnt[x2+1][y2+1]++;
15     }
16     for(int i=1;i<=n;++i)
17         for(int j=1;j<=m;++j){
18             sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+cnt[i][j];
19     }
20     for(int i=1;i<=n;++i)
21     for(int j=1;j<=m;++j)
22         ans[i][j]=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1]+sum[i][j];
23     while(q--){
24         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
25         printf("%lld\n",ans[x2][y2]-ans[x2][y1-1]-ans[x1-1][y2]+ans[x1-1][y1-1]);
26     }
27 }

 

posted @ 2021-02-23 21:56  古比  阅读(56)  评论(0编辑  收藏  举报