1097: 树状数组1(快速求和计算)

来源:互联网 发布:淘宝咬鲜花表情 编辑:程序博客网 时间:2024/05/21 17:58

1097: [视频]树状数组1(快速求和计算)
时间限制: 3 Sec 内存限制: 128 MB
提交: 231 解决: 109
[提交][状态][讨论版]
题目描述

【题意】
给出n个数,并且初始化所有数字都为0。接下来m次操作。
操作有以下两种:
1:C x y 把第x个数的值增加y(y可正可负)
2:P x y 就是询问 第x个数 至 第y个数 的所有数的和。
【输入格式】
第一行两个整数n和m(1 <= n <= 100000 ,1 <= m <= 100000 )
下来m行,每行描述一次操作。
【输出格式】
当2操作时输出相应的答案。
【样例输入】
5 3
C 2 3
C 4 5
P 1 5
【样例输出】
8

#include<iostream>using namespace std;int n,m;int control[110000];int lowbit(int x){return x&-x;}void change(int x,int k){    while(x<=n)    {        control[x]=control[x]+k;        x+=lowbit(x);    }}int getnum(int x){    int ans=0;    while(1<=x)    {        ans+=control[x];        x-=lowbit(x);    }    return ans;}int main(){    char s;    int x,y;    cin>>n>>m;    for (int i=0;i<m;i++)    {        cin>>s>>x>>y;        if (s=='C')            change(x,y);        else            cout<<getnum(y)-getnum(x-1)<<endl;    }    return 0;}
阅读全文
0 0