南阳理工acm 题目116 士兵杀敌(二)树状数组

来源:互联网 发布:大众老总途观 知乎 编辑:程序博客网 时间:2024/06/05 23:06

士兵杀敌(二):用树状数组做的,果然很省时间,虽然还不知道为什么省时间,对算法的时间复杂度什么的也不太明白,不过先会用了一点,至于为什么以后再研究吧!微笑

# include <stdio.h># define lowbit(x) x&(-x)int a[1000001],b;void add(int i, int x){while (i<=b){a[i]+=x;i+=lowbit(i);}}int sum(int m){int sum=0;    while(m>0){sum+=a[m];m-=lowbit(m);    }    return sum;}int main(){int i, c, m, x, y;char s[3];//freopen("in.txt", "r", stdin);scanf("%d%d", &b, &m);for (i = 1; i<=b; i++){scanf("%d", &c);add(i, c);}while (m--){scanf("%s%d%d", s, &x, &y);if (s[0]=='A')add(x, y);elseprintf("%d\n", sum(y)-sum(x-1));}return 0;}