今度はたぶん大丈夫。
void search(int a[], int *left, int *right)
{
  int psum = 0, psum_min = INT_MAX, sum = INT_MIN;
  int i, psum_min_pos;
  for(i = 0; i < NUM; i++)
  {
    psum += a[i];
    if(psum < psum_min)
    {
      psum_min = psum;
      psum_min_pos = i;
    }
    if(psum - psum_min > sum)
    {
      sum = psum - psum_min;
      *left = psum_min_pos + 1;
      *right = i + 1;
    }
  }
}