https://nanti.jisuanke.com/t/31460

题意

两个操作。1:查询区间[l,r]的和,设长度为L=r-l+1, sum=a[l]*L+a[l+1]*(L-1)+...+a[r]。2:将第a个位置修改为b。

分析

变形一下,sum=a[l]*(r-l+1)+a[l+1]*(r-(l+1)-1)+...+a[r](r-r+1)=(r+1)*a[l]-a[l]*l。因此,可维护两个树状数组计算。至于更新操作,实质就是看变化前后的差值,变大就相当与加上差值,否则就是减。注意用longlong

#include<bits/stdc++.h>
const int maxn = 1e5 + ;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + ;
typedef long long ll;
ll c1[maxn],c2[maxn];
int a[maxn];
int lb(int x){ return x&-x; }
void add(ll c[],int x,ll d){
while(x<maxn){
c[x]+=d;
x+=lb(x);
}
}
ll sum(ll c[],int x){
ll res=;
while(x){
res+=c[x];
x-=lb(x);
}
return res;
}
ll query(int l,int r){
return (r+)*(sum(c1,r)-sum(c1,l-))-(sum(c2,r)-sum(c2,l-));
}
int main(){
int n,q;
int op,x,y;
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++) {
scanf("%d",&x);
add(c1,i,x);
add(c2,i,1ll*i*x);
a[i]=x;
}
while(q--){
scanf("%d%d%d",&op,&x,&y);
if(op==){
printf("%lld\n",query(x,y));
}else{
add(c1,x,y-a[x]);
add(c2,x,1ll*x*(y-a[x]));
a[x]=y;
}
}
return ;
}

ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

    262144K   Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study (线段树)

    Ryuji is not a good student, and he doesn't want to study. But there are n books he should learn, ea ...

  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. 计蒜客 1460.Ryuji doesn't want to study-树状数组 or 线段树 (ACM-ICPC 2018 徐州赛区网络预赛 H)

    H.Ryuji doesn't want to study 27.34% 1000ms 262144K   Ryuji is not a good student, and he doesn't wa ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 G Trace(逆向,两颗线段树写法)

    https://nanti.jisuanke.com/t/31459 思路 凡是后面的轨迹对前面的轨迹有影响的,可以尝试从后往前扫 区间修改需要push_down,单点更新所以不需要push_up(用 ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 D 杜教筛 前缀和

    链接 https://nanti.jisuanke.com/t/31456 参考题解  https://blog.csdn.net/ftx456789/article/details/82590044 ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

随机推荐

  1. java反射(java.lang.reflect) ---普通单例模式唯一性问题

    1. 普通的饱汉式.饿汉式 package org.bighead.test2; public class TestPrivate { private String str = "strPr ...

  2. markdown小知识总结

    字体.字号.颜色 但如果我们想修改文字大小/颜色/字体,就要用font标签,代码如下: 宋体大小为2的字 color代表字体颜色(要用16进制颜色值),size代表文字大小,face代表字体 效果展示 ...

  3. WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题

    问题:WPF中MVVM模式下 ListView绑定ListCollectionView时,CurrentChanged无法触发 解决方案: 初期方案:利用ListView的SelectionChang ...

  4. 面向对象___str__和__repr__

    老师的博客关于此知识点 http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7 __str__和__repr__ 改变对象的字符串显示__ ...

  5. JS库创建

    建立js库模板 (function (){ function $(){ alert("被调用到喽!"); /*alert()是JavaScript脚本语言中窗口window对象的一 ...

  6. [LeetCode] 4. 寻找两个有序数组的中位数

    题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 ...

  7. Bokeh

    超级好用的显示图像用的package哟~~ 用法自己Google哟~ 特别喜欢这个带各种颜色的Bokeh.palette https://bokeh.pydata.org/en/latest/docs ...

  8. Axios

    axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端.简单的理解就是ajax的封装 它本身具有以下特征: a.从浏览器中创建 XMLHttpRequest     b ...

  9. python之json模块

    #!/usr/bin/python # -*- coding: UTF- -*- ''' )序列化相关 json pickle (序列化是指将) 序列化是指将一个字符串转换成基础数据类型或者基础数据类 ...

  10. Java Lucene入门

    1.lucene版本:7.2.1 pom文件: <?xml version="1.0" encoding="UTF-8"?> <project ...