public void FillIntervalManagers()
{
var occurrences = new int[alphabet.Cardinality - 1];
for (int i = 0; i < occurrences.Length; i++)
{
occurrences[i] = -1;
}
var intervals = new List<int>[alphabet.Cardinality - 1];
for (int i = 0; i < intervals.Length; i++)
{
intervals[i] = new List<int>();
}
for (int j = 0; j < building.Length; j++)
{
int value = building[j] - 1;
intervals[value].Add(j - occurrences[value]);
occurrences[value] = j;
}
if (congenericChains == null)
{
FillCongenericChains();
}
for (int k = 0; k < intervals.Length; k++)
{
int start = intervals[k][0];
int end = building.Length - intervals[k].Last();
intervals[k].RemoveAt(0);
congenericChains[k].SetIntervalManager(new CongenericIntervalsManager(intervals[k].ToArray(), start, end));
}
}