HDU 3074 (线段树+模P乘法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3074
题目大意:单点更新。维护序列乘法。mod 1000000007。
解题思路:
1000000007*1000000007~10^18<9*10^18(int64)
所以单步模P乘法可以直接计算。
(a*b)%p=[(a%p)*(b%p)]%p,PushUp维护即可。
Query的rson的时候,要先判下lson是否存在,不存在ret=Query(rson),否则ret=(Query(lson)*Query(rson))%p
#include "iostream"
#include "string"
#include "vector"
#include "cstring"
#include "fstream"
#include "cstdio"
using namespace std;
#define M 100005
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define LL long long
#define mod 1000000007
LL ans[M<<];
void PushUp(int root)
{
LL a=ans[root<<]%mod,b=ans[root<<|]%mod;
ans[root]=(a*b)%mod;
}
void build(int l,int r,int root)
{
if(l==r)
{
scanf("%I64d",&ans[root]);
return;
}
int mid=(l+r)>>;
build(lson);
build(rson);
PushUp(root);
}
void update(int p,int value,int l,int r,int root)
{
if(l==r)
{
ans[root]=value;
return;
}
int mid=(l+r)>>;
if(p<=mid) update(p,value,lson);
else update(p,value,rson);
PushUp(root);
}
LL Query(int L,int R,int l,int r,int root)
{
if(L<=l&&r<=R) return ans[root]%mod;
int mid=(l+r)>>;
LL ret=-;
if(L<=mid) ret=Query(L,R,lson);
if(R>mid)
{
LL rr=Query(L,R,rson);
if(ret!=-)
{
LL a=ret%mod,b=rr%mod;
ret=(a*b)%mod;
}
else ret=rr;
}
return ret;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,q,ll,rr,p,k,v,cmd;
int T;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
build(,n,);
scanf("%d",&q);
while(q--)
{
scanf("%d",&cmd);
if(cmd==)
{
scanf("%d%d",&k,&v);
update(k,v,,n,);
}
if(cmd==)
{
scanf("%d%d",&ll,&rr);
LL ans=Query(ll,rr,,n,);
printf("%I64d\n",ans%mod);
}
}
}
return ;
}
HDU 3074 (线段树+模P乘法)的更多相关文章
- hdu 3074(线段树)
Multiply game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法
在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...
- 数据库支持emoji表情
从MySQL5.5.3开始,MySQL 支持一种utf8mb4的字符集,这个字符集能够支持4字节的UTF8编码的字符.utf8mb4字符集能够完美地兼容utf8字符串.在数据存储方面,当一个普通中文字 ...
- vim 打开高亮和关闭高亮
:set hls 找开高亮 :set nohls 关闭高亮
- SQL学习笔记----更改SQL默认的端口号
1.SQLServer配置管理器----SQLServer网络配置----MSSQLSERVER的协议---TCP/IP(已启用)---IP地址 清空素有的IP,在IPALL下更改默认的端口: 2. ...
- CLR via C#(01)-.NET平台下代码是怎么跑起来的
1. 源代码编译为托管模块 程序在.NET框架下运行,首先要将源代码编译为托管模块.CLR是一个可以被多种语言所使用的运行时,它的很多特性可以用于所有面向它的开发语言.微软开发了多种语言的编译器,编译 ...
- Delphi之DLL知识学习2---静态链接和动态链接
静态连接 静态链接是指Delphi 编译器把要调用的函数和过程编译成可执行代码.函数的代码可存留在应用程序的 .dpr文件或一单元中.当链接用户的应用程序时,这些函数与过程便成为最终的可执行文件的一部 ...
- MySql中delimiter的作用是什么?
这个命令与存储过程没什么关系吧.其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么 ...
- Mishka and Interesting sum Codeforces Round #365 (树状数组)
树状数组,与Turing Tree类似. xr[i]表示从1到i的抑或,树状数组维护从1到i每个数只考虑一次的异或,结果为sum(r) ^ sum(l) ^ xr[r] ^ xr[l] 其中xr[r] ...
- Java Hour 63 反射
首先要感谢下这位可爱的作者: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html. 本文是基于其模板的模仿实验. 获得C ...
- <转>WCF中出现死锁或者超时
WCF回调中的死锁 一.服务器端死锁 对于如下服务: [ServiceContract(CallbackContract = typeof(INotify))] public class Downlo ...