using
System;
using
System.Collections.Generic;
class
GFG
{
static
void
totalCount(
int
[,] A,
int
N,
int
M,
int
[,] queries,
int
Q)
{
int
[]row_sum =
new
int
[N];
int
[]col_sum =
new
int
[M];
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < M; j++) {
row_sum[i] += A[i,j];
col_sum[j] += A[i,j];
}
}
List<
int
> sum_list =
new
List<
int
>();
for
(
int
i = 0; i < N; i++)
sum_list.Add(row_sum[i]);
for
(
int
i = 0; i < M; i++)
sum_list.Add(col_sum[i]);
sum_list.Sort();
for
(
int
i = 0; i < Q; i++) {
int
L = queries[i,0];
int
R = queries[i,1];
int
l = left_search(sum_list, L);
int
r = right_search(sum_list, R);
Console.Write(r - l + 1 +
" "
);
}
}
static
int
left_search(List<
int
> A,
int
num)
{
int
low = 0, high = A.Count- 1;
int
ans = 0;
while
(low <= high)
{
int
mid = low + (high - low) / 2;
if
(A[mid] >= num) {
ans = mid;
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return
ans;
}
static
int
right_search( List<
int
> A,
int
num)
{
int
low = 0, high = A.Count- 1;
int
ans = high;
while
(low <= high) {
int
mid = low + (high - low) / 2;
if
(A[mid] <= num) {
ans = mid;
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return
ans;
}
static
void
Main()
{
int
N = 3, M = 2;
int
[,]A =
new
int
[,]{ { 13, 3 },{ 9, 4 },{ 6, 10 } };
int
Q = 2;
int
[,]queries =
new
int
[,]{ { 10, 20 }, { 25, 35 } };
totalCount(A, N, M, queries, Q);
}
}