【传送门】: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 ;
}

Ryuji doesn't want to study (树状数组)的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)

    https://nanti.jisuanke.com/t/31460 题意 两个操作.1:查询区间[l,r]的和,设长度为L=r-l+1, sum=a[l]*L+a[l+1]*(L-1)+...+a[ ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 HRyuji doesn't want to study 树状数组

    题目链接:https://nanti.jisuanke.com/t/A2007 题目大意:有一个序列含有n个数a[1],a[2],a[3],……a[n],有两种操作: 第一种操作:k=1,l,r,询问 ...

  3. ACM-ICPC 2018 徐州赛区网络预赛H Ryuji doesn't want to study(树状数组)题解

    题意:给你数组a,有两个操作 1 l r,计算l到r的答案:a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r] (L is the length of [ l, r ] that ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study(树状数组)

    Output For each question, output one line with one integer represent the answer. 样例输入 5 3 1 2 3 4 5 ...

  5. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

  6. poj 3321:Apple Tree(树状数组,提高题)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18623   Accepted: 5629 Descr ...

  7. POJ 3321 树状数组(+dfs+重新建树)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27092   Accepted: 8033 Descr ...

  8. [poj3321]Apple Tree(dfs序+树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26762   Accepted: 7947 Descr ...

  9. POJ 3321 Apple Tree(树状数组)

                                                              Apple Tree Time Limit: 2000MS   Memory Lim ...

随机推荐

  1. excel数据导入到数据库

    package test; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExceptio ...

  2. str.format输出乱码

    如该示例,str.Format(L"相似度:%f\t视频名称:%s\t起始位置:%d\r\n",tmp[0].dblSimilarity,tmp[0].szFileName,tmp ...

  3. Bzoj 1088: [SCOI2005]扫雷Mine (DP)

    Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\) ...

  4. (58)zabbix网络拓扑图配置network map

    zabbix网络地图介绍 “zabbix network map”可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map, 通过map可以了解应用的整体状况:服务器是否异常.网络是否有 ...

  5. UNIX环境C语言进程通信

    一.信号管理 1.函数signal signal函数是UNIX系统信号机制最简单的接口 #include <signal.h> typedef void (*sighandler_t)(i ...

  6. Shell脚本中循环语句for,while,until用法

    循环语句: Bash Shell中主要提供了三种循环方式:for.while和until. 一.for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区 ...

  7. svn设置提交时忽略某些文件

    一.在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单选择TortoiseSVN →Add to Ignore List,会出现一个子菜单,允许你仅选择该文件或者所有具有相同后缀的文件. ...

  8. CSS3-媒体类型

    一.媒体类型(Media Type) 1.link方法引入 <link rel="stylesheet" type="text/css" href=&qu ...

  9. (转)Objective-C语言--属性和实例变量

    本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性 ...

  10. I2C驱动框架(五)

    参考:I2C子系统之 adapter driver注册——I2C_dev_init() i2c的操作在内核中是当做字符设备来操作的,相关初始化在由i2c_dev_init函数来初始化. static ...