anyone ??
--

Amol Sharma
Third Year Student
Computer Science and Engineering
MNNIT Allahabad




On Tue, Aug 2, 2011 at 1:57 PM, Amol Sharma <amolsharm...@gmail.com> wrote:

> hi,
>
> i attempted the problem  http://www.spoj.pl/problems/GSS1/
>
> i have the solved the problem using segment trees.....i have the checked my
> solution for the most of the cases it is working fine.....but i am getting
> WA.......plz tell any case where my code fails !!.....please point out the
> bug if any in the code
>
> #include<stdio.h>
> //                                SEGEMENT TREE
> // this program will make a segment tree of a given array and then perform
> the queries on it as asked in the question fo any range
>
> //starting with the function to ionitialise the segement tree
>
>
> //                        INTIALIZATION
> void initialize(int node, int b, int e, int M[], int A[])
> {
>    if (b == e)
>        M[node] = A[b];
>    else
>   {
> //compute the values in the left and right subtrees
>        initialize(2 * node, b, (b + e) / 2, M, A);
>        initialize(2 * node + 1, (b + e) / 2 + 1, e, M, A);
> //search for the minimum value in the first and
> //second half of the interval
>        if (M[2 * node] >= M[2 * node + 1])
>             M[node] = M[2 * node];
>        else
>             M[node] = M[2 * node + 1];
>    }
> }
>
>
> //function for doing query on the segement tree
> //                            QUERY
>
> int query(int node, int b, int e, int M[], int A[], int i, int j)
> {
>     int p1, p2;
>
> //if the current interval doesn't intersect
> //the query interval return -1
>     if (i > e || j < b)
>         return -1;
>
> //if the current interval is included in
> //the query interval return M[node]
>     if (b >= i && e <= j)
>         return M[node];
>
> //compute the minimum position in the
> //left and right part of the interval
>     p1 = query(2 * node, b, (b + e) / 2, M, A, i, j);
>     p2 = query(2 * node + 1, (b + e) / 2 + 1, e, M, A, i, j);
>
> //return the position where the overall
> //minimum is
>     if (p1 == -1)
>         return /*M[node] =*/ p2;
>     if (p2 == -1)
>         return /*M[node] =*/ p1;
>     if (p1 >= p2)
>         return /*M[node] =*/ p1;
>     return /*M[node] =*/ p2;
> }
>
> int A[50000]={0},M[100000]={-1};
>
> int main()
> {
>     int n,i,j,tc;
>     scanf("%d",&n);//now number of elements in the array is known
>     for(i=0;i<n;i++)
>         scanf("%d",&A[i]);
>
>     //initialize your segement tree now
>
>    initialize(1,0,n-1,M,A);
>
> /*    for(i=0;i<2*n;i++)
>             printf("%d  ",M[i]);
>        printf("\n");
>     */
>     //perform the queries here
>    scanf("%d",&tc);
>     while(tc--)
>     {
>         scanf("%d%d",&i,&j);
>         //perform the query for each interval
>        printf("%d\n",query(1,0,n-1,M,A,i-1,j-1));
>
>         //print the maximun value here
>     }
>
> return 0;
> }
>
>
>
>
>
> Amol Sharma
> Third Year Student
> Computer Science and Engineering
> MNNIT Allahabad
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to