C# Genomic Range Query
static int[] GenomicRangeQuery(string s, int[] p, int[] q)
{
    var r = new int[p.Length];

    for (int k = 0; k < p.Length; k++)
    {
        var pi = p[k];
        var length = q[k] - pi + 1;
        var subStr = s.Substring(pi, length);

        if (subStr.Contains('A'))
        {
            r[k] = 1;
        }
        else if (subStr.Contains('C'))
        {
            r[k] = 2;
        }
        else if (subStr.Contains('G'))
        {
            r[k] = 3;
        }
        else
        {
            r[k] = 4;
        }
    }

    return r;
}

This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.