2020牛客寒假算法基础集训营2 J.求函数 (线段树 推公式 单点修改 区间查询)
2024-09-05 10:11:00
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 ;
}
最新文章
- delphi中webbrowser的用法
- linux下的磁盘和文件系统管理
- windows下安装coreseek/sphinx
- 如何更新Linux源
- JS、jqueryie6浏览器下使用js无法提交表单的解决办法
- unsigned int 转 RGB
- hdu 2304
- VS中Release模式下生成去掉生成pdb文件
- Jenkins+maven+git配置
- 四大组件之Service小结
- Vue 进阶之路(六)
- pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法
- Fiddler抓包请求前设置断点
- CentOS7 上以 RPM 包方式安装 Oracle 18c 单实例
- XSS安全处理
- OA系统启动:基础数据,工作流设计
- 自己喜欢用的一个初始化的common.css
- Smart Thread Pool (智能线程池)
- PL/SQL编辑数据";这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果";处理
- Spring 特点
热门文章
- ThreadPool(线程池)介绍
- 00-django | 01-构建博客目录
- 搜索练习题LETTERS
- .net全栈开发-c#面向对象与工控自动化分拣上位机
- 最新2019Pycharm安装教程,亲测!最新2019pycharm安装!如何安装Pycharm2019版本!如何安装2019Pycharm永久教程!2019Pycharm永久安装!
- 关于在ssm下创建项目使用阿里巴巴下的druid数据库报错,出现无法创建连接的原因
- swiper滑动失效问题
- numpy reshape -1
- windows 停止和启动Redis
- Linux进程间通信-管道深入理解(转)