Codeforces Round 162 (Div. 1) |
---|
Закончено |
Дано n мячей, расставленных в ряд. У каждого мяча есть цвет (выраженный для удобства целым числом) и целочисленное значение. Цвет i-ого мяча равен ci, а значение i-ого мяча равно vi.
Белка Лисска выбирает несколько мячей и создает из них последовательность, не меняя относительный порядок мячей. Она хочет максимизировать значение этой последовательности.
Значение последовательности определяется как сумма следующих значений для каждого мяча (где a и b — заданные константы):
Дано q запросов. Каждый запрос содержит два целых числа ai и bi. Для каждого запроса найдите максимальное значение последовательности, которую может построить белочка при a = ai и b = bi.
Заметьте, что созданная последовательность может быть пустой, а значение пустой последовательности считается равным нулю.
В первой строке содержится два целых числа n и q (1 ≤ n ≤ 105; 1 ≤ q ≤ 500). Во второй строке содержится n целых чисел: v1, v2, ..., vn (|vi| ≤ 105). В третьей строке содержится n целых чисел: c1, c2, ..., cn (1 ≤ ci ≤ n).
В следующих q строках записаны значения констант a и b для запросов. В i-ой из этих строк записаны два целых числа ai и bi (|ai|, |bi| ≤ 105).
В каждой строке целые числа разделены одиночными пробелами.
Для каждого запроса выведите строку, содержащую одно целое число — ответ на запрос. В i-ой строке содержится ответ на i-ый запрос в порядке ввода.
Пожалуйста, не используйте спецификатор %lld, для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
6 3
1 -2 3 4 0 -1
1 2 1 2 1 1
5 1
-2 1
1 0
20
9
4
4 1
-3 6 -1 2
1 2 3 1
1 -1
5
В первом примере, чтобы достичь максимальное значение:
Заметьте, что могут быть и другие способы достичь максимальное значение.
Название |
---|