http://codeforces.com/problemset/problem/1168/A
Эффект: массив по модулю м, одна операция может сделать множество элементов массива (AI + 1)% м, пусть весь массив не снижается, минимальное количество операций поиска
Идеи: Легко знать ответ до не более чем х по модулю т, мы можем бинарные х. Если текущее решение осуществимо, то пространство поиска сводится к [л, среднему], неосуществимая (х> середины) сводятся к [MID, R] вплоть до л = г-1, г в это время является минимальным операндом х ,
Примечание (LF <= пред + т && пред + т <= RF) означает, что она представляет собой интервал [LF, RF] имеет более чем определенный период м, интервал после каждой новой точки тойт интервалов, получается ли Он содержит пред
# include <бит / STDC ++ ч.> с использованием пространства имен STD; ЬурейеЕ долго долго LL; Const INT maxn = 3e5 + 5 ; INT A [maxn]; INT Main () { ИОС :: sync_with_stdio ( 0 ); cin.tie ( 0 ); // freopen ( "datain.txt", "г", STDIN); INT п, м; CIN >> п >> м; для ( INT I = 0 ; <п; я ++ ) { CIN >> а [I]; } INT L = - 1 , г =м; это время (L <R - 1 ) { Int MID = (L + R & Lt) / 2 ; INT ПРЕД = 0 ; // где пред = а [0], в течение от 1 до начала цикла приведет WA BOOL Bad = ложь ; // так как этот подход к [0] в качестве фиксированного значения, не содержится в двоичном поиске для ( INT I = 0 ; I <п, I ++) { // но , очевидно , некоторые оптимальное решение требует модификации в [ 0] INT LF = A [I], RF = A [I] + MID; // Например, некоторые случаи I = 0 до двух присвоенного правой части начальной секции ПЧ ((LF <= ПРЕД && ПРЕД <= РЧ) || (LF <= т + && ПРЕДЫДУЩИЙ ПРЕДЫДУЩИЙ + т <= РЧ)) { Продолжить ; } Если (LF < предыдущая) { плохо = верно ; перерыв ; } Иначе { пред = LF; } } Если (плохо) л = середина; остальной г = середина; } СоиЬ << г << епсИ; }