int RMQUtil(int* hist, int* st, int ss, int se, int qs, int qe, int idx) {
	if (qs <= ss && se <= qe)
		return st[idx];

	if (se < qs || ss > qe)
		return -1;

	int mid = midVal(ss, se);
	return minVal(hist, RMQUtil(hist, st, ss, mid, qs, qe, 2*idx + 1),
			    RMQUtil(hist, st, mid+1, se, qs, qe, 2*idx + 2));
}
Ejemplo n.º 2
0
int RMQUtil(int *st, int ss, int se, int qs, int qe, int index)
{
        if (qs <= ss && qe >= se)
                return st[index];

        if (se < qs || ss > qe)
                return INT_MAX;

        int mid = getMid(ss, se);
        return minVal(RMQUtil(st, ss, mid, qs, qe, 2*index+1),
                      RMQUtil(st, mid+1, se, qs, qe, 2*index+2));
}
Ejemplo n.º 3
0
Archivo: nklineup.c Proyecto: nphuc/alg
long RMQUtil(long *st,long ss,long se,long qs,long qe,long index){
    if(qs<=ss && qe>=se){
        return st[index];
    }
    if(se<qs || ss>qe){
        return LONG_MAX;
    }
    long mid=getMid(ss,se);
    long a=
            RMQUtil(st,ss,mid,qs,qe,2*index+1),
            b=RMQUtil(st,mid+1,se,qs,qe,2*index+2);
    return minVal(a,b);
}
Ejemplo n.º 4
0
/*  A recursive function to get the minimum value in a given range of array
    indexes. The following are parameters for this function.
 
    st    --> Pointer to segment tree
    index --> Index of current node in the segment tree. Initially 0 is
             passed as root is always at index 0
    ss & se  --> Starting and ending indexes of the segment represented by
                 current node, i.e., st[index]
    qs & qe  --> Starting and ending indexes of query range */
int RMQUtil(int *st, int ss, int se, int qs, int qe, int index)
{
    // If segment of this node is a part of given range, then return the
    // min of the segment
    if (qs <= ss && qe >= se)
        return st[index];
 
    // If segment of this node is outside the given range
    if (se < qs || ss > qe)
        return INT_MAX;
 
    // If a part of this segment overlaps with the given range
    int mid = getMid(ss, se);
    return minVal(RMQUtil(st, ss, mid, qs, qe, 2*index+1),
                  RMQUtil(st, mid+1, se, qs, qe, 2*index+2));
}
Ejemplo n.º 5
0
int RMQ(int *st, int n, int qs, int qe)
{
        if (qs < 0 || qe > n-1 || qs > qe) {
                printf("Invalid Input");
                return -1;
        }

        return RMQUtil(st, 0, n-1, qs, qe, 0);
}
Ejemplo n.º 6
0
// Return minimum of elements in range from index qs (quey start) to
// qe (query end).  It mainly uses RMQUtil()
int RMQ(int *st, int n, int qs, int qe)
{
    // Check for erroneous input values
    if (qs < 0 || qe > n-1 || qs > qe)
    {
        printf("Invalid Input");
        return -1;
    }
 
    return RMQUtil(st, 0, n-1, qs, qe, 0);
}
Ejemplo n.º 7
0
Archivo: nklineup.c Proyecto: nphuc/alg
long RMQ(long *st,long n,long qs,long qe){
    return RMQUtil(st,0,n-1,qs,qe,0);
}
int RMQ(int* hist, int* st, int n, int qs, int qe) {
	if (qs < 0 || qe > n - 1 || qs > qe)
		return -1;

	return RMQUtil(hist, st, 0, n-1, qs, qe, 0);
}