1535:【例 1】数列操作
【题目描述】
给定10万次。
【输入】
第一行m操作)
第二行n个整数
接下来b)。
【输出】
若干行,表示a,b]连续和。
【输入样例】
10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 0 1 3 0 4 8 1 7 5 0 4 8
【输出样例】
11 30 35
#include<bits/stdc++.h> using namespace std; int n,m; const int N=1e5+10; int a[N]; int lowbit(int x) { return x&(-x); } int sum(int x) { int ans=0; for(int i=x;i>0;i-=lowbit(i)){ ans+=a[i]; } return ans; } void updata(int x,int y) { for(int i=x;i<=n;i+=lowbit(i)){ a[i]+=y; } } int main() { while(scanf("%d %d",&n,&m)==2){ memset(a,0,sizeof(a)); for(int i=1;i<=n;i++){ int x; scanf("%d",&x); updata(i,x); } while(m--){ int k,x,y; scanf("%d %d %d",&k,&x,&y); if(k==1){ updata(x,y); } else{ printf("%d ",sum(y)-sum(x-1)); } } } return 0; }