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;
    }
                      
        
       
    
    
    
    
    

  • 相关阅读:
    正则匹配任意字(包括换行符)
    linux终端光标的快捷键操作
    正则向前查找和向后查找
    正则表达式软件Expresso
    JsonP 跨域完全解析
    PHP代码阅读Phpxref
    ubuntu 操作用户名和密码
    curl多线程解释[转]
    php递归创建多级目录
    离散数学 第一章 命题逻辑 11 命题及其表示法
  • 原文地址:https://www.cnblogs.com/csnd/p/12062827.html
Copyright © 2011-2022 走看看