Del azul del puente número de intervalo (violencia o disjuntos-set (?) Incluso Nº 7

Descripción del problema

Xiao Ming estos días han estado pensando en una pregunta tan extraña e interesante:

¿Cuántos números incluso en el rango de 1 a hacer una amplia gama de N? Esta es la definición de la gama número par es:

Si el intervalo [L, R] en todos los elementos (es decir, en esta disposición, el L-ésimo a los elementos R) después de la orden para obtener una longitud de "continuo" serie R-L + 1, ascendiendo y llamado a este número par intervalo gama.

Cuando N era muy joven, Xiao Ming puede calcular rápidamente la respuesta, pero cuando N se hace grande cuando el problema no es tan simple, y ahora Bob necesita su ayuda.

Formato de entrada

La primera línea es un número entero positivo N (1 <= N <= 50.000), representa el tamaño de toda la disposición.

La segunda línea es la N diferente número Pi (1 <= Pi <= N), que representa un cierto N digital de matriz completa.

Formato de salida

Salida de un entero que representa el número de secciones diferentes números pares.

entrada de la muestra 1
4
3 2 4 1
Resultado de muestra 1
7
entrada de la muestra 2
5
3 4 2 5 1
Ejemplo de salida 2
9
Ver la etiqueta es disjunta-set como un largo tiempo de no saber escribir ... ¿cómo de búsqueda de Internet encontró una solución a un problema que no es un disjuntos-set ... solución positiva también muy inteligente 2333
violencia S directa (n ^ 2) matriz de barrido, observado [L, R] puede estar compuesta de una secuencia continua si y sólo si el intervalo máximo menos el intervalo mínimo es igual a RL, la respuesta a tiempo de actualización de barrido.
#include <bits / STDC ++ h.>
 usando  espacio de nombres std;
int n;
largo  largo ans = 0 ;
int fa [ 50005 ];
int un [ 50005 ];
int main () 
{ 
    cin >> n;
    int i, j;
    para (i = 1 ; i <= n; i ++ ) 
    { 
        scanf ( " % d " , & a [i]); 
    } 
    Para (i = 1 ; i <= n; i ++ ) 
    { 
        int mmax =0 , mmin = 99999 ;
        para (j = i; j <= n; j ++ ) 
        { 
            mmax = max (mmax, un [j]); 
            mmin = min (mmin, un [j]);
            si (ji == mmax-mmin) ans ++ ; 
        } 
    } 
    Cout << ans;
    volver  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/lipoicyclic/p/12468123.html
Recomendado
Clasificación