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 ...
随机推荐
- hadoop+javaWeb的开发中遇到包冲突问题(java.lang.VerifyError)
1.HDFS + WEB 项目 报java.lang.VerifyError... 异常 抛异常: Exception in thread "main" java.lang.Ver ...
- PHP面向对象——重写与重载
重写/覆盖 override 指:子类重写了父类的同名方法 class Human{ public function say($name){ echo $ ...
- 验证码的种类与实现 C#封装类 - .NET MVC WEBFORM
验证码方式 1.随机字母或者数字,纯文本验证码 这种非常容易破解 ,市场上有大量的现成接口或者工具,背景越复杂难度越高. 2.题库验证码 要破解这种验证码,需要人工收集题库才可以破解,可以免疫不是专门 ...
- Tiny Rss Reader - 迷你RSS阅读器
发布新软件 TinyRss: Windows平台上的一个小巧的Rss阅读器. 用户界面: 项目地址: https://github.com/movsb/tinyrss.git 测试下载: http:/ ...
- Freemarker使用入门
一.概述: FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 Template + data_model = output FreeMarker也是与Web容 ...
- 在linux配置NFS用于RAC的搭建
rac的共享存储有很多种搭建方式,nfs是其中一种.生产环境一般不采用nfs,多用于测试. nfs搭建步骤大致分为如下: 1.划盘 给节点1挂载一块磁盘,并将磁盘分区,并格式化,再挂载 [root@n ...
- WebBrowser控件打开https站点
背景: 与上一篇博文一样,此文亦是由于开发DropboxAPI中遇到问题衍生出来的.由于需要重定向https类型网站,但自己的https证书是自签名的,总是提示'网站的安全证书存在问题'. 鉴此,查了 ...
- RDS MySQL 全文检索相关问题的处理
RDS MySQL 全文检索相关问题 1. RDS MySQL 对全文检索的支持 2. RDS MySQL 全文检索相关参数 3. RDS MySQL 全文检索中文支持 3.1 MyISAM 引擎表 ...
- 处理FF margin-top下降问题
处理DIV子级ZImargin-top下降,父级更着下降问题 html结构如下 <div id="top"> <div id="zi"> ...
- js获取今天明天
目的:记录中展现"今天","明天",除外展现月日. 借鉴: <html> <head> <meta http-equiv=&quo ...