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

  • 相关阅读:
    thymeleaf 模板使用 之 解决因HTML标签未闭合引起的错误
    Spring MVC 拦截器
    Spring boot data jpa 示例
    Hibernate 数据库方言
    Springboot 之 静态资源路径配置
    Java 时间不一致
    IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
    IntelliJ IDEA Spring boot devtools 实现热部署
    Python-集合
    Python-文件读写及修改
  • 原文地址:https://www.cnblogs.com/csnd/p/12062828.html
Copyright © 2011-2022 走看看