Ryuji doesn't want to study (树状数组)
2024-09-22 08:14:46
【传送门】:https://nanti.jisuanke.com/t/31460
【题意】给定一个数组a[N],有两种操作,
操作1,给定 l , r, 查询a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r]的值
(L is the length of [ ll, rr ] that equals to r - l + 1r−l+1).
操作2, 给定x,y, 使a[x] = y
有N个数据,M种操作,对于每个操作1输出计算结果。
【题解】很容易想出来是树状数组类型的题目。但是直接计算不好计算,需要构造合适的树状数组的原数组。这个原数组并不是单纯的a[N]
考虑题目要求的序列,将其变形:
这样我们可以构造并维护两个数组的树状数组,一个是a[i]的树状数组C1[i],一个是 a[i]*i的树状数组C2[i]。
注意这里是修改值而不是增加值,所以增加的是“新值与旧值得差”,并且要注意把原数组a[i]的值重新赋值。
【AC代码】
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int maxn = 1e5+;
ll a[maxn];
int n,m;
ll c1[maxn];
ll c2[maxn];
void init(){
memset(a , , sizeof a);
memset(c1 , , sizeof c1);
memset(c2 , , sizeof c2);
}
int lowbit(int x){
return x & (-x);
} ll query1(int x){
ll ans = ;
while(x > ){
ans += c1[x];
x -= lowbit(x);
}
return ans;
} void add1(int x , ll val){
while(x <= n){
c1[x] += val;
x += lowbit(x);
}
}
ll query2(int x){
ll ans = ;
while(x > ){
ans += c2[x];
x -= lowbit(x);
}
return ans;
} void add2(int x , ll val){
while(x <= n){
c2[x] += val;
x += lowbit(x);
}
} int main(){
while(cin>>n>>m){
init();
for(int i=; i<=n; i++){
cin>>a[i];
add1(i , a[i]);
add2(i , i*a[i]);
//cout<<c1[i]<<" "<<c2[i]<<endl;
}
ll aa,bb,cc;
for(int i=; i<=m; i++){
cin>>aa>>bb>>cc;
if(aa == ){
cout<<(cc+)*( query1(cc) - query1(bb-) ) - (query2(cc) - query2(bb-))<<endl;
}
else{
add1(bb , cc - a[bb] );
add2(bb , bb*cc - bb*a[bb] );
a[bb] = cc;
}
} }
return ;
}
最新文章
- MyBatis在insert插入操作时返回主键ID的配置
- go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )
- [转]HttpURLConnection的使用
- asp.net mvc页面javascript代码中如何使用razor
- 3.html5的文本元素
- AVR 定点数运算程序设计及数制转换
- 1063: [Noi2008]道路设计 - BZOJ
- Mysql锁机制和事务控制
- 一个简单的Java死锁示例(转)
- python爬虫框架scrapy问题的解决
- linux防火墙,高级策略策略实例详解(实例一)
- CF1105E Helping Hiasat
- linux系统的三种网络连接模式
- win8和win7下解决php5.3和5.4、5.5等不能加载php_curl.dll的终极解决办法 收藏
- js數字
- iot平台在k8s搭建过程
- atom使用markdown
- [USACO17FEB]Why Did the Cow Cross the Road I G
- [转]Github 简明教程
- ArcGIS Server 内存占用相关
热门文章
- Codeforces Round #272 (Div. 2)-C. Dreamoon and Sums
- idea快速生成实体类Entity
- vs 2017 boost 安装目录 非安装
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作
- EAGLView介绍
- [LUOGU] P1828 香甜的黄油 Sweet Butter
- Makefile文件中的sed介绍
- CodeForces 149D 区间DP Coloring Brackets
- Knockout v3.4.0 中文版教程-12-控制文本内容和外观-html绑定
- 【01】国内外git托管平台(总结by魔芋)