#include <iostream> #include <cstdio> using namespace std; const int MAXN = 4100; int n, m; long long a[MAXN][MAXN]; struct SegmentTree { int lx, ly, rx, ry; long long Sum; } Tree[2005 * 2005 * 16 + 5]; void Build(int p, int lx, int ly, int rx, int ry) { Tree[p].lx = lx; Tree[p].rx = rx; Tree[p].ly = ly; Tree[p].ry = ry; if (lx == ly && rx == ry) { Tree[p].Sum = a[lx][rx]; return; } int midx = (lx + ly) / 2; int midy = (rx + ry) / 2; Build(p * 4, lx, midx, rx, midy); if (midx + 1 <= ly) Build(p * 4 + 1