NYOJ116 士兵杀敌

来源:互联网 发布:教育平台软件 编辑:程序博客网 时间:2024/06/05 18:51

题目大意:

传送门:点我传送

我的理解:

使用树状数组求解;

我的代码:

#include<cstdio>#include<iostream>#include<algorithm>#define MAX_N 1000005using namespace std;int a[MAX_N];int n;int lowbit(int x){    return x&(-x);}void begin(){    int t,i,j;    for(i=n;i>=1;i--)    {       t=0;      for(j=i-lowbit(i)+1;j<=i;j++)              t=a[j]+t;     a[i]=t;    }}int add(int i,int y){    while(i<=n)    {        a[i]=a[i]+y;        i=lowbit(i)+i;    }}int query(int x){    int sum=0;int i=x;    while(i>0)    {       sum=sum+a[i];       i=i-lowbit(i);    }       return sum;}int main(){    int m,x,y;char s[10];    cin>>n>>m;    for(int i=1;i<=n;i++)    scanf("%d",&a[i]);    begin();    while(m--)    {        cin>>s>>x>>y;        if(s[0]=='A')           add(x,y);        else        cout<<query(y)-query(x-1)<<endl;    }    return 0;}

原创粉丝点击