传送门
线段树入门操作。
直接把题目给的 ( r − i + 1 ) ∗ a [ i ] (r-i+1)*a[i] (r−i+1)∗a[i]拆开变成 ( r + 1 ) ∗ 1 ∗ a [ i ] − i ∗ a [ i ] (r+1)*1*a[i]-i*a[i] (r+1)∗1∗a[i]−i∗a[i]因此只需要维护 ∑ i = l r a [ i ] \sum _{i=l} ^r a[i] ∑i=lr​a[i]和 ∑ i = l r i ∗ a [ i ] \sum _{i=l} ^r i*a[i] ∑i=lr​i∗a[i]就行了。
代码:

#include<bits/stdc++.h>
#define N 100005
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define ll long long
using namespace std;
inline ll read(){ll ans=0,w=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans*w;
}
int n,m;
ll sum[N],a[N];
struct Node{int l,r;ll sum1,sum2;}T[N<<1];
inline void pushup(int p){T[p].sum1=T[lc].sum1+T[rc].sum1,T[p].sum2=T[lc].sum2+T[rc].sum2;}
inline void build(int p,int l,int r){T[p].l=l,T[p].r=r;if(l==r){T[p].sum1=a[l],T[p].sum2=T[p].l*a[l];return;}build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void update(int p,int k,ll v){if(T[p].l==T[p].r){T[p].sum1+=v;T[p].sum2+=T[p].l*v;return;}if(k<=mid)update(lc,k,v);else update(rc,k,v); pushup(p);
}
inline pair<ll,ll>query(int p,int ql,int qr){if(ql<=T[p].l&&T[p].r<=qr)return make_pair(T[p].sum1,T[p].sum2);if(qr<=mid)return query(lc,ql,qr);if(ql>mid)return query(rc,ql,qr);pair<ll,ll>ret1=query(lc,ql,mid),ret2=query(rc,mid+1,qr);return make_pair(ret1.first+ret2.first,ret1.second+ret2.second);
}
int main(){freopen("overwatch.in","r",stdin);freopen("overwatch.out","w",stdout);n=read(),m=read();for(int i=1;i<=n;++i)sum[i]=sum[i-1]+i,a[i]=read();build(1,1,n);while(m--){int op=read(),x=read();if(op==1)update(1,x,read());else{int y=read();pair<ll,ll>ret=query(1,x,y);ll ans=ret.first*(y+1)-ret.second;printf("%lld\n",ans);}}return 0;
}

2018.10.22 cogs2471. [EZOI 2016]源氏的数学课(线段树)相关推荐

  1. 2471. [EZOI 2016]源氏的数学课

    2471. [EZOI 2016]源氏的数学课 [题目描述] 给定一个数列,有如下两种操作: 1:将其中的一个数加上s(s为整数) 2:给定区间[l,r],求al* (r-l+1) + al-1*(r ...

  2. [EZOI 2016]源氏的数学课

    题目链接:传送门 求 带单点修改 把式子拆开 求 ∑ i = l r a i ∗ r − ∑ i = l r a i ∗ i + ∑ i = l r a i \sum_{i=l}^{r} a_{i}* ...

  3. 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)

    传送门 支持区间加w(i−ql+1)2w(i−ql+1)2,将这个式子直接展开变成区间加wi2+w(ql−1)2+2w(1−ql)iwi2+w(ql−1)2+2w(1−ql)i,再选i做主元,会变成w ...

  4. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 177  Solved: 128 [Submit][Stat ...

  5. COCI 2015/2016 PROKLETNIK(单调栈+线段树)

    COCI 2015/2016 PROKLETNIK 题目大意 给定序列A1..NA_{1..N}A1..N​,分别求出QQQ组询问区间[L,R][L,R][L,R]中最长的连续子序列Al..rA_{l ...

  6. 2018南京网络赛 G. Lpl and Energy-saving Lamps (线段树非递归实现)

    线段树非递归实现.点修改下的区间查询. 注意预处理的时候要把一到十万的都进行处理一遍,因为输入的月份不一定在月份的个数之内. #include <iostream> #include &l ...

  7. 【一周头条盘点】中国软件网(2018.10.22~2018.10.26)

    每一个企业级应用的人都置顶了中国软件网 中国软件网为你带来最新鲜的行业干货 一周热点 微软发布"创纪录"的Q1财报:营收291亿美元 净利同比增34% 10月25日,微软发布了20 ...

  8. 【NOIP2018模拟赛2018.10.22】pets

    与cards同天考的题,反正很恶心人.. 首先分组,我将一队放进a,二队放进b,然后队伍中n^2建边,若 i 打得过 j 就连一条有向边,将 j 的入度+1,然后topo序判环. 可以看出如果有环就说 ...

  9. 2018.10.22 20:10

    没人关心你具体到底吃了哪些东西,怎么吃的,虾是怎么剥皮的.骨头是怎么啃得,只需要讲清楚"吃饱"这个目的就好. 不要一味的埋头耕地,也好时常抬头看看田埂. 一直埋头耕地,你就是一个搬 ...

最新文章

  1. C++乘法的int越界问题
  2. 模式设计概述:代理者模式
  3. 财务需要学python-财务人要学Python吗?
  4. 九阴真经 第十五层--node.js 第2天
  5. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)
  6. 前端程序员也需要知道进程和线程
  7. nltk——文本分类
  8. 效果器的使用技巧-与调音台的无缝连接
  9. android 属性动画源码分析
  10. python实现CRAPS赌博游戏。
  11. win10更改C盘下的用户文件夹名
  12. 百度爬虫robots.txt文件规范
  13. Script Identification of Multi-Script Documents: A Survey
  14. 基于libevent的http客户端,并可以请求https
  15. Windows安装Gitea
  16. Tomcat 在IE中下载rar文件直接以乱码方式打开解决方案
  17. 基于服务器搭建部署的疫情动态地图
  18. Python使用FTP上传文件
  19. 单片机学习和应用百问大全
  20. axure低保真原型_如何在Google表格中创建低保真原型

热门文章

  1. 苹果正在三星电视上安装iTunes;科技部鼓励民营企业参与国家科技 雷锋早报...
  2. Input dataset is not organized (height = 1) Input dataset is not organized (height = 1)......
  3. 为什么互联网大厂企业都宁愿花20K+招应届生,都不愿意涨薪5K来留住老员工?
  4. 用html和css制作静态小米网页(二)
  5. 超过2t硬盘分区_磁盘超过2T无法用fdisk分区的问题
  6. realsense系列相机ros内外参标定2022.11.20
  7. 心情随笔20180718
  8. HDU 6186 CS Course(线段树区间操作)
  9. WordPress插件-Display Posts
  10. python中数字应该用什么表示,python中可以表示的最小数字是多少?