e-olymp
Задачи

Произведение на отрезке

Произведение на отрезке

Это нормально чувствовать себя взволнованным и напряженным за день до олимпиады по программированию. Чтобы расслабиться, вы пошли выпить со своими друзьями в соседний паб. Для сохранения остроты ума до следующего дня, Вы решили сыграть в следующую игру. Для начала Ваши друзья написали последовательность n целых чисел x1, x2,..., xn. Потом следует k раундов, на каждом из которых выполняется одна из следующих команд:

  • команда изменения, когда необходимо изменить одно значение в последовательности;
  • команда умножения, когда по заданным значениям i и j необходимо определить, является ли произведение xi * xi+1 * ... * xj-1 * xj положительным, отрицательным или равным нулю.

Так как Вы находитесь в пабе, то штрафом за неправильный ответ будет употребление дополнительной пинты пива. Вы беспокоитесь, что это может негативно повлиять на Вас при участии в конкурсе на следующий день, и у Вас нет желания проверять на корректность теорию пика Баллмера. К счастью, друзья разрешили Вам пользоваться ноутбуком. Поскольку Вы больше доверяете Вашим способностям программировать, нежели математике, то было решено написать программу, которая поможет сыграть в игру.

Входные данные

Каждый тест состоит из нескольких строк. Первая строка каждого теста содержит два числа n и k (1n, k105) - количество элементов в последовательности и число раундов в игре. Вторая строка содержит n целых чисел xi - начальные значения последовательности (-100xi100 для i = 1, 2,..., n). Каждая из следующих k строк описывает команду, начинающуюся заглавной буквой 'C' или 'P'. Если это буква 'C', то строка содержит команду замены, за буквой следуют два числа i и v, указывающих на то что xi необходимо заменить на v (1in и -100v100). Если это буква 'P', то строка задает команду умножения, за буквой следуют два числа i и j - необходимо вычислить произведение от xi до xj включительно (1ijn). Каждый тест содержит как минимум одну команду умножения.

Выходные данные

Для каждого теста вывести одну строку, содержащую ответы на все команды умножения. i-ый символ строки является результатом i-ой команды умножения. Если произведение положительно, то вывести символ '+' (плюс); если произведение отрицательно, то вывести '-' (минус); если произведение равно нулю, то вывести 0 (ноль).

Лимит времени 1 секунды
Лимит использования памяти 122.17 MiB
Входные данные #1
4 6
-2 6 0 -1
C 1 10
P 1 4
C 3 7
P 2 2
C 4 -5
P 1 4
5 9
1 5 -2 4 3
P 1 2
P 1 5
C 4 -5
P 1 5
P 4 5
C 3 0
P 1 5
C 4 -5
C 4 -5
Выходные данные #1
0+-
+-+-0