Hi,
I'm trying the problem spoj.pl/problems/GSS1/5
and getting error SIGSEGV.
My code is
[color=#8040BF]
#include<stdio.h>
void initialize(int ,int ,int );
int query(int ,int ,int ,int ,int );
int max(int ,int ,int );
int M[50100],A[50010],N;
int main()
{ int i,m,p,q;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&A[i]);
scanf("%d",&m);
initialize(1,1,N);
while(m--)
{ scanf("%d%d",&p,&q);
printf("%d\n",query(1,1,N,p,q));
}
return 0;
}
void initialize(int node, int b, int e)
{ if (b == e)
M[node] = A[b];
else
{ initialize(2 * node, b, (b + e) / 2);
initialize(2 * node + 1, (b + e) / 2 + 1, e);
M[node]=max(M[2*node],M[2*node+1],M[2*node]+M[2*node+1]);
}
}
int query(int node, int b, int e, int i, int j)
{ int p1, p2;
if (i > e || j < b)
return -1;
if (b >= i && e <= j)
return M[node];
p1 = query(2 * node, b, (b + e) / 2,i, j);
p2 = query(2 * node + 1, (b + e) / 2 + 1, e, i, j);
if (p1 == -1)
return M[node] = p2;
if (p2 == -1)
return M[node] = p1;
if (A[p1] <= A[p2])
return M[node] = p1;
return M[node] = p2;
}
int max(int x,int y,int z)
{ if(x>y)
{ if(x>z)
return x;
else
return z;
}
else
{ if(y>z)
return y;
else
return z;
}
}
[/color]
Can somebody please tell me the reason behind this error.
As far as I think, it should be because of the size of the M array, but I'm not quite able to calculate the right size for it.
Thanks in advance.
created
last reply
- 30
replies
- 1.8k
views
- 9
users
- 1
link