http://poj.org/problem?id=1656
题意很直白, 对100*100的矩阵操作,
置位操作:每次把一个子矩阵置为0,或1,
查询操作:每次查询一个子矩阵的1个个数;
当然n只有100暴力是没问题的,如果n更大 就得用别的方法来写,下面这种 是四分树的写法:
二维线段树其实还是用一维时的思想。
一维的时候父区间分为两个子区间,那么二维的时候 也可以把一个父矩阵分为四个子矩阵。。。
最后发现....其实四分树也是蛮暴力的方法。。。
空间复杂度感人 。。。 256N
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <vector>
using namespace std;
int sum[105*256],set[105*256];
void pushDown(int idx,int lx,int rx,int ly,int ry)
{
if (set[idx]==-1) return;
set[idx*4+1]=set[idx*4+2]=set[idx*4+3]=set[idx*4+4]=set[idx];
int