【洛谷】P5542 [USACO19FEB] Painting The Barn S(二维前缀和优化)

思路:

这本暴力思路是不是很清晰,但是纯暴力这数据范围必t,我们观察发现其实耗时就是标记涂过的地方,所以我们现在将重心放在我们该如何优化上,不卖关子了,其实这是一个非常经典的二维前缀和优化~(具体细节观看代码,稳稳AC)

ACcode:


#include
using namespace std;
#define int long long
const int N=1e3+10;
int n,k,a[N][N],s[N][N];
void solve() {
 cin>>n>>k;
 for(int i=1;i<=n;i++){
    int x1,x2,y1,y2;
    cin>>x1>>y1>>x2>>y2;
    x1++,x2++,y1++,y2++;//因为我们规定的数组下标从一开始
	a[x1][y1]++;
	a[x2][y2]++;
	a[x1][y2]--;
	a[x2][y1]--; 
 }
 int ans=0;
 for(int i=1;i<=1000;i++)
 for(int j=1;j<=1000;j++){
 	s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j];
 	if(s[i][j]==k)ans++;
 }
 cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}




over~

你可能感兴趣的:(算法,c++,前缀和)