P1725 Novo Lu Qi (monótona optimización de colas)

Descripción: https://www.luogu.com.cn/problem/P1725

Secuencia puede ser visto como una rejilla están numeradas de 0 a N, Qi Connaught expuesto solamente a partir de un número pequeño para un gran número de enrejado de rejilla móviles. Qi y Lu Connaught se mueven de acuerdo a una manera particular, mientras que ella estaba en un enrejado i, se trasladó a cualquier intervalo de una rejilla [i + l, i + r] en. Usted pregunta por qué fue tan conmovedor, esto no es simplemente porque es un tonto ah.

Cada rejilla tiene un índice de congelación A [i], numeradas 0 0 índice de celosía congelado. Cuando se expone Connaught Qi posicionado en que las celdas de la cuadrícula se puede obtener que la congelación índice de A [i]. Qi Lu prometen esperanza de llegar al otro lado, para el índice máximo de congelación, por lo que ella puede ser una rana dura lección.

Pero debido a que es estúpida, por lo que decidió complacer a usted ayuda a que decidir cómo seguir adelante.

Inicialmente, el Qi Connaught expuestos en el número de rejilla 0, el siguiente número de posición todo el tiempo que es mayor que N, incluso llegar al otro lado.


El significado es el sujeto desnudo.

Partimos de 1 rejilla enumeración numerada, numerado i celosía puede hacerse [ir, il] transferido desde

Pero esta vez a escribir.

De hecho, creemos que, para el recuento de i, el valor de la red antes de DP ya no se ha actualizado

Y sólo nos importa ir a il máximo

Podemos mantener una serie monótona de dp cola, por lo que cuando se puede transferir a encontrar rápidamente la máxima transferencia

#include <bits / STDC ++ h.>
 usando  espacio de nombres std;
#define max (a, b) (a> b a:? b)
 int n, l, r, ans;
int un [ 400,009 ], dp [ 400,009 ];
int q [ 400,009 ], p [ 400,009 ], pre [ 400,009 ]; 
int main () 
{ 
    cin >> n >> l >> r;
    para ( int i = 0 ; i <= n; i ++) scanf ( " % d " , & a [i]);
    int cola = 0 , la cabeza = 1 ;
    En tm = R ^-L + 1. ; // para mantener la longitud del intervalo 
    de ( int I = L; I <= n- + R & lt; I ++ ) 
    { 
        int K = max ( 0 , I- L); 
        DP [I] = pre [ K] + A [I];
         IF (I> = N-) ANS = max (ANS, DP [I]);
         el tiempo (cola> = cabeza && Q [cola] <= DP [I]) tail-- ; 
        Q [ + cola +] DP = [i], P [cola] = i;
         al mismo tiempo la cabeza ++ (cabeza IP []> = m) ; 
        pre [i] = Q [cabeza]; // a punto en el extremo derecho del intervalo de i es el valor máximo de para una buena 
    }     
    printf ( " % D ", años); 
}

 

Supongo que te gusta

Origin www.cnblogs.com/iss-ue/p/12522192.html
Recomendado
Clasificación