题意:

      给你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\n" ,Query(1 ,n ,1 ,b ,c) % MOD);
}
}
return
0;
}

hdu3074 线段树求区间乘积(单点更新)的更多相关文章

  1. hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. hdu 1754 I Hate It (线段树求区间最值)

    HDU1754 I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  3. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  4. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  5. 【线段树求区间第一个不大于val的值】Lpl and Energy-saving Lamps

    https://nanti.jisuanke.com/t/30996 线段树维护区间最小值,查询的时候优先向左走,如果左边已经找到了,就不用再往右了. 一个房间装满则把权值标记为INF,模拟一遍,注意 ...

  6. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  8. HDU6447 YJJ's Salesman-2018CCPC网络赛-线段树求区间最值+离散化+dp

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  1e5个点,问 ...

  9. poj 3264 线段树 求区间最大最小值

    Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...

随机推荐

  1. 译文《最常见的10种Java异常问题》

    封面:洛小汐 译者:潘潘 知彼知己,方能百战不殆. 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践 ...

  2. 泛微OA 多版本存在命令执行

    参考 https://blog.csdn.net/qq_41770175/article/details/102821349 https://www.linktrust.net/oday/471.ht ...

  3. There only 10 people use the same phone as you(i春秋CTF题解)

      (1)访问网址进行CTF测试,仅出现登陆与注册的页面 (2)进行注册尝试登陆并进行burp抓取数据包: (3)注册成功,进行登陆尝试查看信息是否具有提示,在登录的页面只有两个点击页面,一个为:Ch ...

  4. react+ts封装AntdUI的日期选择框之月份选择器DatePicker.month

    需求:由于在项目开发中,当需要使用该组件时都需要对该组件进行大量的代码输出,为了方便代码统一管理,减少冗余代码,所以将此组件进行二次封装. 其他成员在使用中只需将自己的设置通过对应的参数传递到该组件, ...

  5. Lzzy高级语言程序设计之for循环

    public class Mq { public static void main(String[]args){ int a = 3 ; a++;// do{ System.out.println(& ...

  6. PTE 准备之 Repeat sentence

    Repeat sentence After listening to a sentence ,repeat the sentence 3-9 seconds 15 seconds Strategies ...

  7. JAVA-常用集合类型转换例子

    package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.Arrays; import java.ut ...

  8. 一键安装KMS服务

    本文转载于 秋水逸冰 » 一键安装 KMS 服务脚本 KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Wi ...

  9. Git本地操作2

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  10. sqli-labs系列——第二关

    less2 and 1=1有回显,and 1=2无回显,为数值型注入 order by 4–+报错,有3行 查询数据库名 ?id=0' union select 1,(select group_con ...