Output

For each question, output one line with one integer represent the answer.

样例输入

5 3
1 2 3 4 5
1 1 3
2 5 0
1 4 5

样例输出

10
8
两个树状数组一个维护a[i]前缀合,一个维护(n-i+1)*a[i]前缀和。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#pragma GCC diagnostic error "-std=c++11"
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define esp 1e-9
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
typedef unsigned long long ll;
ll sum[],n,m;
ll pos[];
ll a[];
void add(int x,ll val){
for(int i=x;i;i-=lowbit(i))
sum[i]+=val;
}
ll query(int x){
ll ans=;
for(int i=x;i<=;i+=lowbit(i))
ans+=sum[i];
return ans;
}
void add_one(int x,ll val){
for(int i=x;i;i-=lowbit(i))
pos[i]+=val;
}
ll query_one(int x){
ll ans=;
for(int i=x;i<=;i+=lowbit(i))
ans+=pos[i];
return ans;
}
int main()
{
while(scanf("%lld%lld",&n,&m)!=EOF)
{
memset(sum,,sizeof(sum));
memset(pos,,sizeof(pos));
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
add(i,1ll*a[i]*(n-i+));
add_one(i,a[i]);
}
while(m--){
ll op,x,y;
scanf("%lld%lld%lld",&op,&x,&y);
if(op==)
{
ll l=query(x);
ll r=query(y+);
ll u=query_one(x);
ll d=query_one(y+);
//printf("%lld\n",u-d);
printf("%lld\n",l-r-(1ll*(n-y)*(u-d)));
}
else{
add(x,1ll*(-)*a[x]*(n-x+));
add(x,1ll*(n-x+)*y);
add_one(x,1ll*(-)*a[x]);
a[x]=y;
add_one(x,1ll*a[x]);
}
}
}
return ;
}

最新文章

  1. Java Calendar 类的时间操作
  2. Editplus配置VC++(1) 及相关注意事项
  3. Block作为property属性实现页面之间传值(代替Delegate代理与协议结合的方法)
  4. Linux上安装Mysql+Apache+Php
  5. WCF学习笔记之地址
  6. [译]使用Babel和Browserify创建你的ES6项目
  7. Java基础笔记-异常总结,包
  8. HDU 1711 Number Sequence(kmp)
  9. Android studio 1.x 安装完毕后无法打开问题解决方案
  10. JVM内存模型和GC机制
  11. Windows端口开放
  12. 执行Spark运行在yarn上的命令报错 spark-shell --master yarn-client
  13. 交叉编译和安装ARM板(RK3288)和Linux 3.10上的RTL8188无线网卡驱动
  14. Servlet与HTTP介绍学习
  15. Spring 注解@Transactional readOnly=true
  16. Smack类库详细介绍
  17. ssl---阿里云的public.crt和chain.crt的证书怎么弄
  18. Scala集合(一)
  19. Node.js+Ajax实现物流小工具
  20. linux/Centos下查看和修改网卡Mac地址(ifconfig命令)

热门文章

  1. layer Tips参数使用
  2. [原创]c语言中const与指针的用法
  3. C++ should define all local variable outside the loop?
  4. RabbitMQ学习笔记(2)----RabbitMQ简单队列(Hello World)的使用
  5. ZBrush通过显示与隐藏得到子物体
  6. Codeforces div2 #499 B. Planning The Expedition 大水题
  7. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)B. Primal Sport
  8. HDU 2150 Pipe( 判断线段相交水 )
  9. PHP下的Oauth2.0尝试 - OpenID Connect
  10. mybatis-plus注解版实现多表联查(sql)