I Have quite a lot of test cases .... still getting WA # 0
What does this # 0 mean ...
PLZ HELP!!!!
Are there any i m cases missing?
#include <stdio.h>
#define MIN_VAL -999999999
struct tree {
long int l_sum,r_sum,m_sum,sum ;
}seg_tree[200003] ;
long int n ,arr[50001];
long int max (long int a,long int b) ;
struct tree merge (struct tree l,struct tree r) ;
void update (long int l,long int u,long int i ,long int a,long index) ;
struct tree get_sum (long int l,long int u,long int a,long int b,long int i) ;
void create_seg_tree(long int l,long int u,long int index) ;
int main () {
long int i,m,a,b ;
int c ;
scanf("%ld",&n) ;
for (i=0;i<n;i++)
scanf("%ld",&arr[i]) ;
create_seg_tree(0,n-1,0) ;
scanf("%ld",&m) ;
for (i=0;i<m;i++)
{ scanf("%d%ld%ld",&c,&a,&b) ;
switch(c)
{ case 0 : update(0,n-1,0,a-1,b-arr[a-1]) ;
break ;
case 1 : printf("%ld\n",get_sum(0,n-1,a-1,b-1,0).m_sum) ;
break ;
}
}
return 0 ;
}
void update (long int l,long int u,long int i ,long int a,long value) {
long int m=(u+l)/2 ;
if (!(a>u||a<l))
{ if (u==l)
{ seg_tree[i].l_sum+=value ;
seg_tree[i].r_sum+=value ;
seg_tree[i].m_sum+=value ;
seg_tree[i].sum+=value ;
}
else
{ update(l,m,2*i+1,a,value) ;
update(m+1,u,2*i+2,a,value) ;
seg_tree[i]=merge(seg_tree[2*i+1],seg_tree[2*i+2]) ;
}
}
}
struct tree get_sum (long int l,long int u,long int a,long int b,long int i) {
struct tree aux ;
long int m=(u+l)/2 ;
if (b<l||a>u)
aux.l_sum=aux.r_sum=aux.m_sum=aux.sum=MIN_VAL ;
else if (l>=a&&u<=b)
aux=seg_tree[i] ;
else
aux=merge(get_sum(l,m,a,b,2*i+1),get_sum(m+1,u,a,b,2*i+2)) ;
return aux ;
}
long int max (long int a,long int b) {
if (a>b)
return a ;
else
return b ;
}
struct tree merge (struct tree l,struct tree r) {
struct tree aux ;
if (l.l_sum==MIN_VAL&&l.r_sum==MIN_VAL&&l.m_sum==MIN_VAL&&l.sum==MIN_VAL)
return r ;
if (r.l_sum==MIN_VAL&&r.r_sum==MIN_VAL&&r.m_sum==MIN_VAL&&r.sum==MIN_VAL)
return l ;
aux.sum=l.sum+r.sum ;
aux.m_sum=max(max(l.m_sum,r.m_sum),l.r_sum + r.l_sum) ;
aux.l_sum=max(l.sum+r.l_sum,l.l_sum) ;
aux.r_sum=max(l.r_sum+r.sum,r.r_sum) ;
return aux ;
}
void create_seg_tree(long int l,long int u,long int i) {
long int m=(u+l)/2 ;
if (u==l)
seg_tree[i].l_sum=seg_tree[i].r_sum=seg_tree[i].m_sum=seg_tree[i].sum=arr[l] ;
else
{ create_seg_tree(l,m,2*i+1) ;
create_seg_tree(m+1,u,2*i+2) ;
seg_tree[i]=merge(seg_tree[2*i+1],seg_tree[2*i+2]) ;
}
}