Арифметикалық айырмаларды сұрау


Шешімді жөнелту

Ұпайлар: 1
Уақыт шектеуі: 2.0s
Жад шектеуі: 256M

Author:
Problem type
Рұқсат етілген тілдер
Assembly, Awk, Brain****, C, C++, Go, Java, Pascal, Perl, PHP, Python, Sed, Text

Ұзындығы \(n\) \(a_1, a_2, \dots, a_n\) жиымы берілген, мұнда \(1 \le n \le 10^5\).

\(q\) сұрауларын өңдеу қажет, мұнда \(1 \le q \le 10^5\), әр сұрау екі типте:

  • Тип 1. 1 l r — тексеру.
    \(a_l, a_{l+1}, \dots, a_r\) (\(1 \le l \le r \le n\)) бөлігін ұзындығы \(m = r - l + 1\) мультижиын ретінде қарастырыңыз.

    Осы бөліктің элементтерін кез келген тәртіпте орналастыруға болады, жаңа тізбек \(b_1, b_2, \dots, b_m\) алынады.

    Содан кейін \(d_i = b_{i+1} - b_i\) айырмалары барлық \(i\) үшін \(1\)-ден \(m - 1\)-ге дейін есептеледі.

    Сұрау сәтті деп есептеледі, егер \(d_1, d_2, \dots, d_{m-1}\) тізбегі арифметикалық прогрессияны құратын тәртіпті табуға болады. Яғни, \(d_{i+1} - d_i = d_2 - d_1\) барлық \(i\) үшін \(1\)-ден \(m - 2\)-ге дейін.

    Егер мұндай тәртіп болса, жауап ретінде Yes шығарыңыз, әйтпесе No.

  • Тип 2. 2 idx val — жаңарту.
    \(a_{\mathrm{idx}} = \mathrm{val}\) мәнін тағайындау, мұнда \(1 \le \mathrm{idx} \le n\), \(1 \le \mathrm{val} \le 10^9\).

Бірінші типтегі әр сұрау үшін жауапты келу тәртібімен шығарыңыз.

Енгізу

  • Бірінші жолда екі бүтін сан \(n\) және \(q\) (\(1 \le n, q \le 10^5\)) — жиымның ұзындығы және сұраулар саны.

  • Екінші жолда \(n\) бүтін сан \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)) — бастапқы жиым.

  • Келесі \(q\) жолдың әрқайсысы жоғарыда көрсетілген форматтардың бірінде бір сұрауды сипаттайды.

Шығару

Типі 1 сұрау үшін әрқайсысына «Yes» немесе «No» (регистр маңызды емес) жеке жолда шығарыңыз.

Мысалдар

Енгізу 1
5 6
4 10 10 28 28
1 1 5
1 2 4
2 3 12
1 1 5
2 5 30
1 1 5
Жауап 1
YES
YES
NO
NO
Енгізу 2
4 1
135 162 66 185
1 1 4
Жауап 2
YES

Пікірлер

Қазіргі уақытта ешқандай пікір жоқ.