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\n" ,Query(1 ,n ,1 ,b ,c) % MOD);
}
}
return 0;
}
hdu3074 线段树求区间乘积(单点更新)的更多相关文章
- hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1754 I Hate It (线段树求区间最值)
HDU1754 I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
- xdoj-1324 (区间离散化-线段树求区间最值)
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i] 覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...
- 【线段树求区间第一个不大于val的值】Lpl and Energy-saving Lamps
https://nanti.jisuanke.com/t/30996 线段树维护区间最小值,查询的时候优先向左走,如果左边已经找到了,就不用再往右了. 一个房间装满则把权值标记为INF,模拟一遍,注意 ...
- hdu1166 敌兵布阵(线段树 求区间和 更新点)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)
HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...
- HDU6447 YJJ's Salesman-2018CCPC网络赛-线段树求区间最值+离散化+dp
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 1e5个点,问 ...
- poj 3264 线段树 求区间最大最小值
Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...
随机推荐
- 译文《最常见的10种Java异常问题》
封面:洛小汐 译者:潘潘 知彼知己,方能百战不殆. 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践 ...
- 泛微OA 多版本存在命令执行
参考 https://blog.csdn.net/qq_41770175/article/details/102821349 https://www.linktrust.net/oday/471.ht ...
- There only 10 people use the same phone as you(i春秋CTF题解)
(1)访问网址进行CTF测试,仅出现登陆与注册的页面 (2)进行注册尝试登陆并进行burp抓取数据包: (3)注册成功,进行登陆尝试查看信息是否具有提示,在登录的页面只有两个点击页面,一个为:Ch ...
- react+ts封装AntdUI的日期选择框之月份选择器DatePicker.month
需求:由于在项目开发中,当需要使用该组件时都需要对该组件进行大量的代码输出,为了方便代码统一管理,减少冗余代码,所以将此组件进行二次封装. 其他成员在使用中只需将自己的设置通过对应的参数传递到该组件, ...
- Lzzy高级语言程序设计之for循环
public class Mq { public static void main(String[]args){ int a = 3 ; a++;// do{ System.out.println(& ...
- PTE 准备之 Repeat sentence
Repeat sentence After listening to a sentence ,repeat the sentence 3-9 seconds 15 seconds Strategies ...
- JAVA-常用集合类型转换例子
package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- 一键安装KMS服务
本文转载于 秋水逸冰 » 一键安装 KMS 服务脚本 KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Wi ...
- Git本地操作2
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
- sqli-labs系列——第二关
less2 and 1=1有回显,and 1=2无回显,为数值型注入 order by 4–+报错,有3行 查询数据库名 ?id=0' union select 1,(select group_con ...