Ryuji doesn't want to study (树状数组)
【传送门】: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 (树状数组)的更多相关文章
- 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[ ...
- 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,询问 ...
- 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 ...
- 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 ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- poj 3321:Apple Tree(树状数组,提高题)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18623 Accepted: 5629 Descr ...
- POJ 3321 树状数组(+dfs+重新建树)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27092 Accepted: 8033 Descr ...
- [poj3321]Apple Tree(dfs序+树状数组)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26762 Accepted: 7947 Descr ...
- POJ 3321 Apple Tree(树状数组)
Apple Tree Time Limit: 2000MS Memory Lim ...
随机推荐
- html中常见符号的代码表示
HTML中空格的集中代码表示: HTML中空格 不断行的空白(1个字符宽度) 半个空白(1个字符宽度) 一个空白(2个字符宽度) 窄空白(小于1个字符宽度) 其他常见的 ...
- Mac 输入法小技巧
相信使用Mac的朋友第一次使用Mac首先要考虑的就是输入法的问题,现在越来越多的第三方输入法都开始支持Mac平台,是否有同学仍然执着于看似“不符”国人习惯用法的OS X自带拼音输入法呢?自带的拼音输入 ...
- 【JavaScript】两种常见JS面向对象写法
基于构造函数 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = function() { ...
- xadmin下设置“use_bootswatch = True”无效的解决办法
环境: python 2.7 django 1.9 xadmin采用源代码的方式引入到项目中 问题: 在xadmin使用的过程中,设置“use_bootswatch = True”,企图调出主题菜单, ...
- fshc之请求仲裁机制的代码分析
always@(posedge spi_clk or negedge spiclk_rst_n) begin if(~spiclk_rst_n) arbiter2cache_ack_r <='b ...
- Flask 系列之 构建 Swagger UI 风格的 WebAPI
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworl ...
- python基础学习笔记——深浅拷贝
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 lst1 = ["⾦⽑狮王", "紫衫⻰王&qu ...
- luogu1231 教辅的组成
注意把书拆成两份 #include <iostream> #include <cstring> #include <cstdio> #include <que ...
- windows和ubuntu14.04双系统设置默认启动项
首先开机或者重启,在启动项选择菜单处记住win7对应的序号,从上至下的序号从0开始计数,我的win7系统选项处于第5个,那么序号就应该是4,记住后,打开ubuntu系统. 2 按下Ctrl+alt+T ...
- Thread.getContextClassLoader() is null
Java threads created from JNI code in a non-java thread have null ContextClassloader unless the crea ...