#include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define mp make_pair #define pb push_back typedef long long ll; using namespace std; const int MAXN = 310; long long a[MAXN][MAXN], sum[MAXN][MAXN]; int n, m, mx; long long getSum(int x1, int y1, int x2, int y2) { long long res = sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1]; //cerr< mx); } int med = (st + fin)/2; int ans = kill(st, med) + kill(med + 1, fin); int u = fin + 1; for (int i = st; i <= med; i++) { while (u > med + 1 && suf[i] + pref[u - 1] > mx) { u--; } ans += fin + 1 - u; } //suf for (int i = med + 1; i <= fin; i++) { nsuf[i] = suf[i]; //cerr< med) { suf[i] = nsuf[u1]; u1++; continue; } if (u1 > fin) { suf[i] = nsuf[u0]; u0++; continue; } if (nsuf[u0] > nsuf[u1]) { suf[i] = nsuf[u1]; u1++; } else { suf[i] = nsuf[u0]; u0++; } } //pref for (int i = st; i <= med; i++) { npref[i] = pref[i]; } for (int i = med + 1; i <= fin; i++) { npref[i] = lsum[med] - lsum[st - 1] + pref[i]; } u0 = st, u1 = med + 1; for (int i = st; i <= fin; i++) { if (u0 > med) { pref[i] = npref[u1]; u1++; continue; } if (u1 > fin) { pref[i] = npref[u0]; u0++; continue; } if (npref[u0] > npref[u1]) { pref[i] = npref[u1]; u1++; } else { pref[i] = npref[u0]; u0++; } } /*cerr<>nn>>mx; for (int i = 1; i <= nn; i++) { cin>>s[i]; } cout<>test; while (test--) { read(); precalc(); solve(); //solve2(); } return 0; }