当前位置: 首页 > news >正文

Add and Multiply Queries

题目链接:G - Add and Multiply Queries

区间修改+区间查询可以用线段树来做,但是这边介绍树状数组的写法。首先将a数组和b数组分开考虑,对于a数组,因为是加法运算求区间和,因此我们可以采用树状数组+差分来写,对于数组b,我们已知如果b[i] =  1 ,那么不如就进行加法运算,所以我们把b数组中大于1的数加入到一个set集合中,记住set记录的是位置,不是数值,然后可以二分查找进行运算。

代码:
 

#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f;
const int N = 2e5+5;
int a[N],b[N],tr[N];
int n,q;
set<int>st;int lowbit(int x){return x&(-x);
}void add(int x,int c){for(int i=x;i<=n;i+=lowbit(i)){tr[i] += c;}return;
}int ask(int x){int res = 0;for(int i=x;i>=1;i-=lowbit(i)){res += tr[i];}return res;
}int find(int x){return *st.upper_bound(x);
}void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];add(i,a[i]);}for(int i=1;i<=n;i++){cin>>b[i];if(b[i]>1)st.insert(i);}st.insert(n+1);cin>>q;while(q--){int op;cin>>op;if(op==1){int x,k;cin>>x>>k;add(x,-a[x]);add(x,k);a[x] = k;}else if(op==2){int x,k;cin>>x>>k;if(b[x]==1&&k>1)st.insert(x);if(k==1&&b[x]>1)st.erase(x);b[x] = k;}else{int l,r;cin>>l>>r;int p = l-1;int ans = 0;while(p<r){int t = find(p);if(t>r){ans += ask(r)-ask(p);break;} ans += ask(t-1)-ask(p);if(ans+a[t]>ans*b[t])ans+=a[t];else ans*=b[t];p = t;}cout<<ans<<"\n";}}}signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T=1;while(T--){solve();}return 0;
}


http://www.mrgr.cn/news/8230.html

相关文章:

  • 云计算第二阶段---DBA Day05-DAY07
  • 【Material-UI】深入探讨Radio Group组件的自定义功能
  • 算法刷题笔记 筛质数(详细注释的C++实现,同时包含朴素筛法、埃氏筛法和线性筛法详细介绍)
  • JavaScript 数据结构 ==== 二叉树
  • 「蓝桥·算法双周赛」第十七场分级赛——小白入门赛 ——前四道题
  • 如何优雅的实现CRUD,包含微信小程序,API,HTML的表单(一)
  • 使用Qt+Visual Stuidio写一个简单的音乐播放器(1)
  • 回归预测|基于北方苍鹰优化最小二乘支持向量机的数据预测Matlab程序NGO-LSSVM 多特征输入单输出 含基础程序
  • Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
  • 计算机网络原理试卷2017年10月
  • 深度学习 回归问题
  • 图形化的Agent工具
  • 全国上市公司网络安全风险指数(2001-2023年)
  • 【JAVA基础】字符串
  • 【功能自动化】进阶版——使用mysql数据表获取参数,并批量更新数据
  • 海山数据库(He3DB)技术分享:客户端认证
  • MySQL字符串比较忽略尾随空格
  • linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法
  • 660高数刷题
  • 解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题