#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template class cumulativeSum { private: int ny, nx; vector > sum; public: cumulativeSum(){} cumulativeSum(const vector >& a) { ny = a.size(); nx = a[0].size(); sum.assign(ny+1, vector(nx+1, 0)); for(int i=0; i y2 || x1 > x2) return 0; return sum[y2+1][x2+1] - sum[y1][x2+1] - sum[y2+1][x1] + sum[y1][x1]; } }; class TriangleSum { private: int n; cumulativeSum cs1, cs2; public: TriangleSum(const vector >& v){ n = v.size(); vector > a(n, vector(n, 0)); vector > b(n, vector(n, 0)); for(int i=0; i(a); a.clear(); cs2 = cumulativeSum(b); } long long getSum(int y, int x, int size){ long long ans = cs1.getSum(y, x, y+size-1, n-1); ans -= cs2.getSum(y, n-y+x, y+size-1, n-1); return ans; } }; void bfs(int n, const vector& by, const vector& bx, vector >& dist) { static const int dy[] = {-1, -1, 0, 0, 1, 1}; static const int dx[] = {-1, 0, -1, 1, 0, 1}; dist.resize(n); for(int i=0; i > q; for(int i=0; i> n >> k >> p; vector by(k), bx(k); for(int i=0; i> by[i] >> bx[i]; -- by[i]; -- bx[i]; } vector > dist; bfs(n, by, bx, dist); TriangleSum ts(dist); long long ans = 0; for(int y=0; y