Дугмићи
Аутор: Павле Мартиновић
Текст и тест примери: Алекса Милојевић
Тестирање: Момчило Тошић
Анализа решења: Момчило Тошић
Решење када T_i \leq 6, и Z_i \leq 6 за X_i = 1:
У овом случају треба разматрати једино кратке сегменте [L,R], јер уколико је одговор ДА, мораћемо у једном тренутку да одемо од крајњег левог до крајњег десног дугмета, што би угасило почетни тајмер уколико је T_L < (R-L). На овим сегментима можемо да покушамо да идемо лево-десно пар пута, мењајући на сваком кораку све тајмере у сегменту.
Решење када N,Q \leq 2000:
Уочимо да, уколико постоји решење, ћемо до сваког дугмета морати у неком тренутку да дођемо до левог, као и до десног краја сегмента, и назад. Дакле, за трајање сваког тајмера у траженом сегменту мора да важи T_i \geq 2(i-L) (дугме-леви крај-дугме) и T_i \geq 2(R-i) (аналогно за десни крај). Обилазак ‘лево-десно’ нам управо гарантује да успевамо чак и ако важи T_i = 2(i-L) и T_i = 2(R-i). Ове неједнакости можемо ручно да проверимо за свако дугме у сегменту.
Решење када X_i = 2
Чињеница да нема промена у низу имплицира offline решење. Наиме, потребно је наћи одговоре за све сегменте [L,R] проласком кроз низ једном. Приметимо да ако важи неједнакост T_i \geq 2(i-L), за неко L, она важи и за све мање L. Сходно томе, обилазимо све дугмиће од 1 ка N и на сваком додајемо у неку структуру све леве крајеве сегмената који у њему почињу, док бришемо редом (од мањих ка већим) све леве почетке за које не важи T_i \geq 2(i-L) (што постижемо тако што нпр. у multiset држимо вредности 2L и поређујемо их са 2i-T_i), а потврђујемо могућност решења за неки сегмент кад дођемо до дугмета које представља његов десни крај. Ово је потребно урадити и у другом смеру (од краја ка почетку).
Решење за пун број поена
Како у свим дугмићима сегмента треба да важи T_i \geq 2(i-L), T_i \geq 2(R-i) (што је еквивалентно са 2L \geq 2i-T_i, 2R \leq T_i+2i), то значи да нам је потребан начин да одредимо да ли постоји вредност 2i-T_i \leq 2L и 2i+T_i \geq 2R за i у сегменту [L, R] (вредност за које не важи неједнакост), као и да променимо вредност на некој позицији. Ово нам омогућавају два сегментна стабла, где чувамо вредности 2i+T_i и 2i-T_i и поређујемо максимум, односно минимум на траженим сегментима са 2R и 2L.