If you are reading/writing the whole array, use get() and put(). As durations is an array of ints you'll need to read two bytes for each element. Also you start from the same address for both the states and durations arrays, so you are reading the same data into the arrays.
int array1[100];
bool array2[100];
//Write array1
EEPROM.put( 0, array1 );
//Read array1
EEPROM.get( 0, array1 );
//Create address offset so Array2 is located after Array1 in EEPROM
int address = sizeof(array1);
//Write array2
EEPROM.put( address , array2 );
//Read array2
EEPROM.get( address , array2 );
//----------------
//Read a single int variable into the array element:
EEPROM.get( location, array1[0] );
//Read a single byte variable into the array element:
EEPROM.read( location, array2[0] );