NYOJ_士兵杀敌(二)

很裸很水的树状数组

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

#include<algorithm>

#include<string>

#include<queue>

using namespace std;

#define N 1000005

int c[N],n,m;

int sum(int x)

{

    int ret=0;

    while(x)

    {

        ret+=c[x];

        x-=x&-x;

    }

    return ret;

}

void add(int x,int d)

{

    while(x<=n)

    {

        c[x]+=d;

        x+=x&-x;

    }

}

int main()

{

    char ch[20];

    int i,j,k,a,b;

    while(~scanf("%d%d",&n,&m))

    {

        for(i=1;i<=n;++i)

        {

            scanf("%d",&a);

            add(i,a);

        }

        while(m--)

        {

            scanf("%s%d%d",ch,&a,&b);

            if(ch[0]=='Q')

                printf("%d\n",sum(b)-sum(a-1));

            else add(a,b);

        }

    }

    return 0;

}

 

你可能感兴趣的:(OJ)