Существует ли какое-либо решение O (1) для этой проблемы? - PullRequest
1 голос
/ 09 июля 2020

Нам дан массив размером N 1 <= N <= 1e5 с Ai положительными целыми числами, так что

1 <= Ai <= 1e9.

нам будет предоставлено Q запросов. 1 <= Q <= 1e5

Каждый раз, когда в запросе будет два целых числа, разделенных пробелами b c, 1 <= b,c <= N

Для каждого запроса нам нужно найти это Is moving from index b of array to index c of array possible ?, и если да, то мы нашли специальную сумму, которую я объяснил ниже.

Мы не можем просто перемещаться в массиве просто из индекса i to i+1, есть ограничение. Если мы хотим перейти от i to j, тогда A [j] должно быть строго больше, чем A [i], т.е. A[j] > A[i].

Обратите внимание на одну вещь: While moving we have to take the just next greater element than the current.

sum то, что нам нужно найти, - это сумма элементов, которые попали на путь, пройденный для достижения пункта назначения.

Например
массив: 3 2 5 4 6 6 7
запрос: 1 7
Итак, согласно запросу нам нужно перейти с 1-го если возможно, до последнего элемента.
Как мы видим, мы можем выбрать путь 3 --> 5 --> 6 --> 7 для достижения пункта назначения, а сумма будет 3+5+6+7 = 21
Но если последний элемент в массиве был 2
массив: 3 2 5 4 6 6 2
запрос : 1 7
Для этого запроса мы не можем достичь пункта назначения, поскольку после 6 целевой элемент 2 меньше его. Итак, для этого запроса NO answer exist.

Мой подход
Я знаю, что могу найти ответ в O(n), просто пройдя массив из A(b) to A(c) и узнав, что если ответ выйти или нет а также sum.
Но проблема в том, что запросов много, поэтому, если я использую решение O(n), сложность времени будет O(QN).
Ограничение по времени составляет всего 1 sec, поэтому мне нужно найти решение с постоянным временем O(c) для этого.

One Thing more С появлением запросов второго типа становится еще сложнее.

Тип запроса 2: в этом запросе нам нужно обновить значение по индексу с заданным K. запрос: b k, затем A[b] = K.

Кто-нибудь может мне помочь в этом ??

1 Ответ

1 голос
/ 09 июля 2020

Вопрос задает N запросов, решение, скорее всего, состоит в том, чтобы выполнить предварительную обработку для вычисления возможностей, а затем запросить каждый из них за время O (1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...