考虑令$b_{i}=a_{i+1}-a_{i}$,那么1操作相当于对L加上K,对(L,R]区间加上D,对R+1减去K+(R-L)*D,然后询问区间和即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define L (k<<1)
4 #define R (L+1)
5 #define mid (l+r>>1)
6 int n,m,p,x,y,k,d,a[100005],f[400005],laz[400005];
7 void up(int k,int l,int r,int x){
8 laz[k]+=x;
9 f[k]+=(r-l+1)*x;
10 }
11 void down(int k,int l,int r){
12 up(L,l,mid,laz[k]);
13 up(R,mid+1,r,laz[k]);
14 laz[k]=0;
15 }
16 void update(int k,int l,int r,int x,int y,int z){
17 if ((l>y)||(x>r))return;
18 if ((x<=l)&&(r<=y)){
19 up(k,l,r,z);
20 return;
21 }
22 update(L,l,mid,x,y,z);
23 update(R,mid+1,r,x,y,z);
24 f[k]=f[L]+f[R]+laz[k]*(r-l+1);
25 }
26 int query(int k,int l,int r,int x,int y){
27 if ((l>y)||(x>r))return 0;
28 if ((x<=l)&&(r<=y))return f[k];
29 down(k,l,r);
30 return query(L,l,mid,x,y)+query(R,mid+1,r,x,y);
31 }
32 int main(){
33 scanf("%d%d",&n,&m);
34 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
35 for(int i=1;i<=m;i++){
36 scanf("%d%d",&p,&x);
37 if (p==2)printf("%d\n",a[x]+query(1,1,n,1,x));
38 else{
39 scanf("%d%d%d",&y,&k,&d);
40 update(1,1,n,x,x,k);
41 if (x<y)update(1,1,n,x+1,y,d);
42 if (y<n)update(1,1,n,y+1,y+1,-k-(y-x)*d);
43 }
44 }
45 }

最新文章

  1. Maven中配置默认JDK版本
  2. 手机自带的显示基站命令(android手机定位,iphone基站定位)
  3. hdu2099
  4. VB.Net中点击按钮(Button)会重复提交两次表单
  5. ExtJs自学教程(1):一切从API開始
  6. 数据库(学习整理)----2--关于Oracle用户权限的授权和收权
  7. vs2012快速将项目托管到github
  8. Eclipse中添加文档注释快捷键
  9. Java 三大特性
  10. std::cout和printf
  11. iOS中关于UIApplication的详细介绍
  12. 【easy】479. Largest Palindrome Product
  13. python笔记23-模块导入、安装
  14. selenium的其他操作
  15. day07----字符编码解码、文件操作(1)
  16. Git分支管理规范
  17. Linux权限命令
  18. Linux/Unix 常用参数使用说明
  19. MySQL:数据类型介绍
  20. Unity声音-音源组件

热门文章

  1. SAE助力南瓜电影7天内全面Severless
  2. Python读取网页表格数据
  3. better-scroll快速上手及封装(vue项目)
  4. BUAA2020软工作业(一)——谈谈我和计算机的缘分
  5. Mac 系统如何利用软链接在根目录创建文件夹?
  6. Noip模拟14 2021.7.13
  7. Flink 实践教程:入门(1):零基础用户实现简单 Flink 任务
  8. AtCoder Beginner Contest 215 F题题解
  9. 第01课 OpenGL窗口(2)
  10. 前端面试手写代码——JS数组去重