NC50427. 数列操作
描述
输入描述
第一行包含2个正整数n,q,表示数列长度和询问个数。保证。
第二行n个整数,表示初始数列。保证。
接下来q行,每行一个操作,为以下两种之一:1 i x:给定i,x,将a[i]加上x;2 l r:给定l,r,求的值。保证。
输出描述
对于每个2lr操作输出一行,每行有一个整数,表示所求的结果。
示例1
输入:
3 2 1 2 3 1 2 0 2 1 3
输出:
6
C++ 解法, 执行用时: 584ms, 内存消耗: 16324K, 提交时间: 2021-05-26 14:00:11
#include<bits/stdc++.h> #define low(i) (i&(-i)) typedef long long ll; using namespace std; const int nn=1e6+7;; int opt,n,m,x,y; ll c[nn]; void add(int p,int v){for(;p<=n;p+=low(p))c[p]+=v;} ll pre(int p){ ll ans=0; for(;p;p-=low(p))ans+=c[p]; return ans; }int main(){ scanf("%d%d",&n,&m); for(int i=1,a;i<=n;i++) scanf("%d",&a),add(i,a); while(m--){ scanf("%d%d%d",&opt,&x,&y); if(opt==1) add(x,y); else printf("%lld\n",pre(y)-pre(x-1)); }return 0; }