【传送门】: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. Java获取字符串里面的重复字符

    public static void main(String[] args) { String word="天地玄黄宇宙洪荒" + "日月盈昃辰宿列张" + & ...

  2. 项目中多条数据保存的json实例

    //js代码function checkCode(num){ var typeid = $("#typeid").val(); if(typeid == "") ...

  3. iOS开发遇见的坑之二:工程文件中插件和自身工程命名冲突

    在升级cocoapod后,我重新管理了一下工程,其实也就是把各个类分类进行管理 类似于这样 然后编译就发现不能运行 1.其中一个错误是工程文件缺失,根据提示添加进来进行 2.有一个是pch的相对路径变 ...

  4. Java多线程大合集

    1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...

  5. javascript基础知识 (八) BOM学习笔记

    一.什么是BOM      BOM(Browser Object Model)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管理窗口 ...

  6. LeetCode 字符串相乘

    给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", num ...

  7. 【状态压缩 meet in middle】poj3139Balancing the Scale

    数组溢出真是可怕的事情 Description You are given a strange scale (see the figure below), and you are wondering ...

  8. logstash-基础操作

    一.环境 https://www.cnblogs.com/suffergtf/p/9566145.html 1.收取日志文件到elasticsearch [root@linux-node1 logst ...

  9. The twelve Day-前端之html

    前端知识之html内容 HTML介绍 1.web服务本质 import socket sk = socket.socket() sk.bind(()) sk.listen() while True: ...

  10. cache支持single/increment/increment4三种方式传输

    1.cache bypass signle---data length 已知 increment ---data length 不知 用 last data address  结束数据传输 2.cac ...