zoukankan      html  css  js  c++  java
  • hdu3074 线段树求区间乘积(单点更新)

    题意:
          给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余。

    思路:

          线段树单点更新,简单题目,不多解释,具体看代码。



    #include<stdio.h>
    
    #define lson l ,mid ,t << 1
    #define rson mid + 1 ,r ,t << 1 | 1
    #define MOD 1000000007
    
    __int64 sum[50000*4+100];
    
    void Pushup(int t)
    {
        sum[t] = ((sum[t<<1] % MOD) * (sum[t<<1|1] % MOD)) % MOD;
    }
    
    void BuidTree(int l ,int r ,int t)
    {
        sum[t] = 1;
        if(l == r)
        {
            scanf("%I64d" ,&sum[t]);
            sum[t] %= MOD;
            return;
        }
        int mid = (l + r) >> 1;
        BuidTree(lson);
        BuidTree(rson);
        Pushup(t);
    }
    
    void Update(int l ,int r ,int t ,int a ,int b)
    {
         if(l == r)
         {
              sum[t] = b % MOD;
              return;
         }
         int mid = (l + r) >> 1;
         if(a <= mid) Update(lson ,a ,b);
         else Update(rson ,a ,b);
         Pushup(t);
    }
    
    __int64 Query(int l ,int r ,int t ,int a ,int b)
    {
        if(a <= l && b >= r)
        return sum[t];
        int mid = (l + r) >> 1;
        __int64 ans = 1;
        if(a <= mid) ans = Query(lson ,a ,b) % MOD;
        if(b > mid) ans *= Query(rson ,a ,b) % MOD;
        return ans % MOD;
    }
    
    int main ()
    {
        int t ,i ,n ,m ,a ,b ,c;
        scanf("%d" ,&t);
        while(t--)
        {
            scanf("%d" ,&n);
            BuidTree(1 ,n ,1);
            scanf("%d" ,&m);
            while(m--)
            {
               scanf("%d %d %d" ,&a ,&b ,&c);
               if(a) Update(1 ,n ,1 ,b ,c);
               else printf("%I64d
    " ,Query(1 ,n ,1 ,b ,c) % MOD);
            }
        }
        return 0;
    }
                      
        
       
    
    
    
    
    

  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/csnd/p/12062828.html
Copyright © 2011-2022 走看看