10963: Codility - Genomic Range Query
Description
Find the minimal nucleotide from a range of sequence DNA.
A DNA sequence can be represented as a string consisting of the letters A,C,G
and T
, which correspond to the types of successive nucleotides in the sequence. Each nucleotide has an impact factor, which is an integer. Nucleotides of types A,C,G
and T
have impact factors of 1, 2, 3 and 4, respectively. You are going to answer several queries of the form: What is the minimal impact factor of nucleotides contained in a particular part of the given DNA sequence?
The DNA sequence is given as a non-empty string $S = S_0S_1...S_{N-1}$ consisting of $N$ characters. There are $M$ queries, which are given in non-empty arrays $P$ and $Q$, each consisting of $M$ integers. The $K$-th query $(0 ≤ K < M)$ requires you to find the minimal impact factor of nucleotides contained in the DNA sequence between positions $P_K$ and $Q_K$ (inclusive).
For example, consider string $S =$ CAGCCTA and arrays $P, Q$ such that:
P[0] = 2 Q[0] = 4 P[1] = 5 Q[1] = 5 P[2] = 0 Q[2] = 6
The answers to these $M = 3$ queries are as follows:
- The part of the DNA between positions 2 and 4 contains nucleotides G and C (twice), whose impact factors are 3 and 2 respectively, so the answer is 2.
- The part between positions 5 and 5 contains a single nucleotide T, whose impact factor is 4, so the answer is 4.
- The part between positions 0 and 6 (the whole string) contains all nucleotides, in particular nucleotide A whose impact factor is 1, so the answer is 1.
Input
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000];
- M is an integer within the range [1..50,000];
- each element of arrays P and Q is an integer within the range [0..N - 1];
- P[K] ≤ Q[K], where 0 ≤ K < M;
- string S consists only of upper-case English letter
A,C,G,T
.
Output
Sample 1 Input
7
CAGCCTA
3
2 4
5 5
0 6
Sample 1 Output
2
4
1