2020牛客寒假算法基础集训营2 J.求函数 (线段树 推公式 单点修改 区间查询)
https://ac.nowcoder.com/acm/contest/3003/J
题解:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll mod = 1e9+;
const int maxn = 2e5+;
struct segT{
ll l,r;
ll dat;
}t1[maxn*],t2[maxn*]; //两棵线段树
ll k[maxn],b[maxn];
ll ans;
void build1(ll p,ll l,ll r){
t1[p].l = l,t1[p].r = r;
if(l == r) { t1[p].dat = k[l]%mod;return;}
ll mid = (l+r)/;
build1(p*,l,mid);
build1(p*+,mid+,r);
t1[p].dat = ( t1[p*].dat * t1[p*+].dat) %mod ;
}
void build2(ll p,ll l,ll r){
t2[p].l = l,t2[p].r = r;
if(l == r) { t2[p].dat = b[l]%mod;return;}
ll mid = (l+r)/;
build2(p*,l,mid);
build2(p*+,mid+,r);
t2[p].dat =( (t1[p*+].dat * t2[p*].dat)%mod+ t2[p*+].dat )%mod ;
}
void upd1(ll p,ll L,ll R,ll v){
if(t1[p].l == L &&t1[p].r == R ) {t1[p].dat = v;return;}
int mid = (t1[p].l + t1[p].r )/;
if (L<=mid) upd1(p*,L,R,v);
else upd1(p*+,L,R,v);
t1[p].dat = ( t1[p*].dat * t1[p*+].dat )%mod;
}
void upd2(ll p,ll L,ll R,ll v){
if(t2[p].l == L&&t2[p].r == R ) {t2[p].dat = v;return;}
int mid = (t2[p].l + t2[p].r )/;
if(L<=mid) upd2(p*,L,R,v);
else upd2(p*+,L,R,v);
t2[p].dat =( (t1[p*+].dat * t2[p*].dat)%mod+ t2[p*+].dat )%mod ;
} void query(ll p,ll l,ll r){
if(l<=t2[p].l && r>=t2[p].r ) {
ans = (ans*t1[p].dat + t2[p].dat)%mod; //前面的区间*后面区间的t1[p].dat + 后面区间的t2[p].dat
return ;
}
int mid = (t2[p].l + t2[p].r )/;
if(l<=mid) query(p*,l,r);
if(r>mid) query(p*+,l,r);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i = ;i<=n;i++) {
scanf("%lld",&k[i]);
}
for(int i = ;i<=n;i++){
scanf("%lld",&b[i]);
}
build1(,,n);
build2(,,n);
while(m--){
int f;
scanf("%d",&f);
if(f == ) {
ll pos,tk,tb;
scanf("%lld%lld%lld",&pos,&tk,&tb);
upd1(,pos,pos,tk);
upd2(,pos,pos,tb);
// printf("de %d %d\n" ,t1[1].dat,t2[1].dat);
}
if(f == ){
int l,r;
scanf("%lld%lld",&l,&r);
ans = ;
query(,l,r);
printf("%lld\n",ans%mod);
}
}
return ;
}
2020牛客寒假算法基础集训营2 J.求函数 (线段树 推公式 单点修改 区间查询)的更多相关文章
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- 2020牛客寒假算法基础集训营1 J. 缪斯的影响力 (矩阵快速幂/费马小定理降幂)
https://ac.nowcoder.com/acm/problem/200658 f(n) = f(n-1) * f(n-2) * ab ,f的第一项是x,第二项是y. 试着推出第三项是x·y·a ...
- 2020牛客寒假算法基础集训营4 J 二维跑步
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...
- 2020牛客寒假算法基础集训营4-F树上博弈
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...
- 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...
- 2020牛客寒假算法基础集训营1 F-maki和tree
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客寒假算法基础集训营5 J 炫酷数学
链接:https://ac.nowcoder.com/acm/contest/331/J来源:牛客网 小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个. 当然,直接做这个式 ...
- 2020牛客寒假算法基础集训营5 G街机争霸
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...
随机推荐
- 邓Laravel2020-01-28
ORM .一对一 hasOne $this->hasOne('外键的模型名称','外键的id','自己表里对应的id')// demo一对一 用户表里又area_id与地区表id一致 用户表和地 ...
- .net core 中如何运用 appsettings.json 进行配置开发、生产不同配置
.net core 默认会有 appsettings.Development.json 文件,这是根据ASPNETCORE_ENVIRONMENT来读取的. 新建架构appsettings.Produ ...
- 【python基础语法】第7天作业练习题
import keyword ''' # 第一题:简单题 1.什么是全局变量? 2.什么是局部变量? 3.函数内部如何修改全局变量(如何声明全局变量 )? 4.写出已经学过的所有python关键字,分 ...
- php根据字段相识度进行排序查询
$data = [ [ 'id'=>1, 'title'=>'test内容管理系统', ], [ 'id'=>2, 'title'=>'开源test', ], [ 'id'=& ...
- 两种从 TensorFlow 的 checkpoint生成 frozenpb 的方法
1. 从 ckpt-.data,ckpt-.index 和 .meta 生成 frozenpb import os import tensorflow as tf from tensorflow.py ...
- 1.python数据类型详解
python数据类型分类 1).数值型:整数型(int).浮点型(float).布尔型(bool 取值:True.False) 2).容器类型 : 字符串型(str).列表(list).元祖(tupl ...
- P3902 递增
链接:P3902 ----------------------------------------- 这道题就是最长上升子序列的模板题,因为我们修改的时候可没说不能改成小数(暴力) --------- ...
- Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学
神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...
- CMake 复制文件方法
我们经常会遇到将第三方库文件复制到项目运行时文件夹,或者将子项目生成的库文件复制到项目运行时文件夹的情况,本文介绍FILE-COPY.add_custom_command.ADD_CUSTOM_TAR ...
- IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年,持续更新~)
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 注意 本教程适用于 IntelliJ IDEA 所有版本,请放心食用~ ...