Смысл проблем: заданное число N A [], и теперь образуют новый массив б с [], 1 <= Ь [г] <= а [I]. Q. максимальное значение всех программ и.
Идеи: первый заказ. Затем сегментация статистического вклада, предполагая [I-1] <а [I], то [а [я-1] + 1, а [я]] вклад оставил все программы * законное право программы, что является законным это максимальное значение в пределах этого диапазона.
Пусть макс = х, то вклад в правой части х * (х ^ (п-я + 1) - (х-1) * (п-я + 1)), все х сложить, чтобы найти префикс и, = х ^ (п-г + 2) + (х-1) ^ (п-я + 1) ... ^ (п-г + 1); крайняя правая часть может быть определена с использованием лагранжиан.
Все будет закончено. Но мой совет, кажется, немного медленно.
(В конце концов, я добавил дополнительный журнал, изменить его завтра. Сегодня есть несколько вопросов, которые составляют.
(Но в действительности это в рамках подготовки к борту.
# include <. бит / STDC ++ H> #define LL долго долго #define Rep (я, а, б) для (INT I = а; г <= Ь; я ++) с использованием пространства имен STD; Const INT maxn = 200010 ; Const INT Mod = 1e9 + 7 ; Const INT мод = 1e9 + 7 ; ИНТ в [maxn], сумма [maxn], анс; LL F [maxn], FAC [maxn], INV [maxn]; LL Р (LL а, б LL) { LL ANS = 1 ; в то время как (б) { если (б & 1 ) ANS = ANS * а% по модулю; б >> =1 ; а = а * а% по модулю; } Если (анс < 0 ) ANS + = мод; вернуться анс; } Недействительными инициализации ( INT TOT) { FAC [ 0 ] = 1 ; для ( INT I = 1 ; я <= TOT; я ++ ) FAC [I] = FAC [i - 1 ] * я% по модулю; INV [TOT] = Р (FAC [TOT], mod - 2 ); INV [ 0 ] = 1 ; // 求阶乘逆元 для ( INT I = tot-1 ; я> = 1 ; i-- ) INV [I] = INV [I + 1 ] * (г + 1 )% по модулю; } LL Лагранжа (LL п, LL к) { Rep (я, 1 , к + 1 ) П [I] = (е [i - 1 ] + P (I, к- 1 ))% по модулю; если (п <= к + 1 ) возвращение F [N]; INT TOT = к + 1 ; INIT (общ); LL ANS = 0 , то теперь = 1 ; для ( INT I = 1 ; я <= карапуз, я ++) в настоящее время = в настоящее время * (п)%мод; для ( INT I = 1 , я <= TOT; я ++ ) { LL INV1 = P (п, mod - 2 ); LL INV2 = INV [i - 1 ] * INV [TOT-я]% по модулю; если ((TOT-я) & 1 ) INV2 = mod - INV2; LL темп = * Теперь INV1% по модулю; Темп = темп * е [я]% мод * INV2% по модулю; ANS + = темп; если (ANS> = моды) ans- = моды; } Возврата ANS; } Int решения ( INT х, INTк) { если ! (х) возврат 0 ; вернуться Р (х, к + 1 ) -Lagrange (х 1 , к + 1 ); } INT основных () { INT N; в то время как (~ зсапЕ ( " % d " , & N)) { Rep (я, 1 , N) зсапЕ ( " % d " , & [I]); рода (а + 1 , а + N + 1 ); ANS = 0 ; Сумма [ 0 ] = 1 ; Rep (я, 1, N) , сумма [I] = 1LL * сумма [i - 1 ] * а [я]% Мод; Rep (я, 1 , N) { если (а [я] == а [i - 1 ]) продолжить ; INT Рез = (решение (A [I], N-I + 1 ) -solve (а [i - 1 ], N-I + 1 ) + Mod)% Моды; (ANS + = 1LL * сумма [i - 1 ] * разреш% Мод)% = моделирование; } Е ( " % d \ п " , ANS); } Возвращает 0 ; }