using
System;
using
System.Collections.Generic;
public
class
HelloWorld {
public
static
int
cmp(List<
int
> arr, List<
int
> b)
{
if
(arr[0] == b[0]) {
return
0;
}
else
{
return
(arr[0] < b[0]) ? -1 : 1;
}
}
public
static
List<
long
>
MaximumValue(
int
n,
int
q, List<List<
int
> > arr,
List<List<
int
> > queries)
{
arr.Sort(cmp);
List<
long
> prefixArr =
new
List<
long
>();
for
(
int
i = 0; i < n + 1; i++) {
prefixArr.Add(0);
}
List<
long
> ans =
new
List<
long
>();
for
(
int
i = 0; i < q; i++) {
ans.Add(0);
}
for
(
int
i = 0; i < n; i++) {
prefixArr[i + 1] = prefixArr[i] + arr[i][1];
}
for
(
int
i = 0; i < q; i++) {
int
start = Int32.MaxValue, end
= Int32.MinValue;
int
l = 0;
int
h = n - 1;
while
(l <= h) {
int
mid = l + (h - l) / 2;
if
(arr[mid][0] >= queries[i][0]) {
start = Math.Min(start, mid);
h = mid - 1;
}
else
l = mid + 1;
}
l = 0;
h = n - 1;
while
(l <= h) {
int
mid = l + (h - l) / 2;
if
(arr[mid][0] <= queries[i][1]) {
end = Math.Max(end, mid);
l = mid + 1;
}
else
h = mid - 1;
}
if
(end + 1 < 0 || start >= prefixArr.Count) {
ans[i] = 0;
}
else
ans[i]
= prefixArr[end + 1] - prefixArr[start];
}
return
ans;
}
public
static
void
Main(
string
[] args)
{
int
N = 5, Q = 3;
List<List<
int
> > arr =
new
List<List<
int
> >();
List<
int
> a1 =
new
List<
int
>();
a1.Add(1);
a1.Add(2);
arr.Add(a1);
List<
int
> a2 =
new
List<
int
>();
a2.Add(3);
a2.Add(2);
arr.Add(a2);
List<
int
> a3 =
new
List<
int
>();
a3.Add(4);
a3.Add(5);
arr.Add(a3);
List<
int
> a4 =
new
List<
int
>();
a4.Add(7);
a4.Add(1);
arr.Add(a4);
List<
int
> a5 =
new
List<
int
>();
a5.Add(10);
a5.Add(4);
arr.Add(a5);
List<List<
int
> > queries =
new
List<List<
int
> >();
List<
int
> m1 =
new
List<
int
>();
m1.Add(0);
m1.Add(12);
queries.Add(m1);
List<
int
> m2 =
new
List<
int
>();
m2.Add(4);
m2.Add(6);
queries.Add(m2);
List<
int
> m3 =
new
List<
int
>();
m3.Add(2);
m3.Add(8);
queries.Add(m3);
List<
long
> ans = MaximumValue(N, Q, arr, queries);
for
(
int
i = 0; i < ans.Count; i++) {
Console.Write(ans[i] +
" "
);
}
}
}