Para el problema de XOR, muchos de ellos se unen con el prefijo y, por ejemplo, esta pregunta le permite encontrar el número de valores XOR que son iguales en el intervalo disjunto
Es fácil pensar en usar prefijos y expresar intervalos, ahora considere cómo no intersectarse y no repetir cálculos
1. Ciclo bidimensional, la primera dimensión comienza desde 1, la segunda dimensión se usa para estadísticas y una para actualizar
En las estadísticas, de i a n, los valores XOR de todos los intervalos en esta sección se verifican para ver si son iguales antes, y luego se calculan
Al actualizar, desde 1-i, agregue todos los valores de intervalo anteriores
De esta manera, no será pesado
#include <iostream> #include <map> #include < string > #include <cstring> #include <algorithm> usando el espacio de nombres std; typedef largo largo ll; const int N = 5e5 + 10 ; int s [N]; int a [N]; int cnt [N]; int main () { int n; cin >> n; int i; para (i = 1 ; i <= n; i ++ ) { cin >> a [i]; s [i] = s [i- 1 ] ^ a [i]; } ll res = 0 ; para (i = 1 ; i <= n; i ++ ) { int j; para (j = i; j <= n; j ++ ) { res + = cnt [s [j] ^ s [i- 1 ]]; } para (j = 1 ; j <= i; j ++ ) { cnt [s [i] ^ s [j- 1 ]] ++ ; } } cout << res << endl; }