Monitor
该题的目标对象是一个二维数组
①该题没有给出二维数组的具体范围,而只是给出了\(n*m<=1e7\)
不能够直接定义数组,那么就可以进行动态开辟数组
vector<vector<int> > a(n+5,vector<int>(m+5));
相当于
a[n+5][m+5]
②该题对二维数组会进行多次矩形操作,直接暴力操作会导致超时,因而我们可以使用差分来优化
③之后会有多次询问,因而也不能够直接求解矩形内非零个数,因此使用二维前缀和进行预处理
另外要注意的地方:
如果使用
cin cout
进行读入输出操作的话,记得关同步,不然会超时而且提交的时候要用G++,用C++也会超时
代码:
// Created by CAD on 2020/1/12.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
while(cin>>n>>m)
{
vector<vector<int> > a(n+5,vector<int>(m+5));
vector<vector<int> > sum(n+5,vector<int>(m+5));
int p;cin>>p;
while(p--)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
a[x1][y1]++,a[x2+1][y2+1]++;
a[x1][y2+1]--,a[x2+1][y1]--;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1],
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+(a[i][j]!=0);
int q; cin>>q;
while(q--)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
int s=(x2-x1+1)*(y2-y1+1);
if(sum[x2][y2]+sum[x1-1][y1-1]-sum[x1-1][y2]-sum[x2][y1-1]==s) cout<<"YES\n";
else cout<<"NO\n";
}
}
return 0;
}