又是一个runtime error的代码,求高手指教

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <math.h>
  4 
  5 long long  a[100005];
  6 struct node
  7 {
  8     int left;
  9     int right;
 10     long long  sum;
 11     int flag;
 12 } b[100005*2];
 13 
 14 
 15 void build(int left , int right , int i)//为left,right ,sum赋值
 16 {
 17     int mid;
 18     b[i].left=left;
 19     b[i].right=right;
 20     b[i].flag=0;
 21     if(left==right)
 22     {
 23         b[i].sum=a[left];
 24         return ;
 25     }
 26 
 27     mid=(left+right)/2;
 28     build(left,mid,2*i);
 29     build(mid+1,right,2*i+1);
 30     b[i].sum=b[2*i].sum + b[2*i+1].sum;
 31 
 32 }
 33 
 34 void  Update(int left , int right ,int i)//注意是区间更新还是确定的点更新
 35 {
 36     if(b[i].flag==1)
 37     {
 38         return ;
 39     }
 40     if(b[i].left==b[i].right )
 41     {
 42         b[i].sum=sqrt(b[i].sum);
 43         if(b[i].sum==1) b[i].flag=1;
 44         return ;
 45     }
 46 
 47         int mid =(b[i].left+b[i].right)/2;
 48         if(right<=mid) Update(left,right,2*i);
 49         if(left>mid) Update(left ,right,2*i+1);
 50         else { Update(left,mid,2*i); Update(mid+1 ,right,2*i+1);};//区间更新会有这句话,确定点更新不会有这句话
 51         b[i].sum=b[i*2].sum+b[2*i+1].sum;
 52 }
 53 
 54 
 55 
 56 long long  Query(int left, int right,int i)
 57 {
 58     int mid;
 59     if(b[i].left==left && b[i].right ==right) return b[i].sum;
 60     mid=(b[i].left+b[i].right)/2;
 61     if(right<=mid) return Query(left,right,2*i);
 62     if (left>mid ) return Query(left,right,2*i+1);
 63     if(left<=mid && mid<right)
 64     return Query(left,mid,2*i) + Query(mid+1,right,2*i+1);
 65 }
 66 
 67 
 68 
 69 int main()
 70 {
 71     int n;
 72     int m;
 73     int t,x,y;
 74     int k=1;
 75     int i;
 76     while(1)
 77     {
 78         scanf("%d",&n);
 79         for(i=1;i<=n;i++)
 80         {
 81             scanf("%I64d",&a[i]);
 82         }
 83         build(1,n,1);
 84         scanf("%d",&m);
 85         printf("Case #%d:\n",k++);
 86 
 87         for(i=0;i<m;i++)
 88         {
 89             scanf("%d%d%d",&t,&x,&y);
 90             if(t==0)
 91             {
 92                 Update(x,y,1);
 93             }
 94             if(t==1)
 95             {
 96                 printf("%I64d\n",Query(x,y,1));
 97             }
 98 
 99         }
100     }
101     return 0;
102 }
优质内容筛选与推荐>>
1、数据库基础
2、iOS 成员变量,实例变量,属性变量的区别,联系
3、fabric-sdk-go client开发
4、使用iview--1
5、Placement operator new


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号