题目二十 士兵杀敌(二)

xiaoxiao2021-02-28  108

//用到树状数组,单纯用数组会超时 #include<stdio.h> const int MAXN =1000005; int bit[MAXN]; int n,m,x,y; char c[10]; int lowbit(int x){ return x&(-x); } //sum(i): 求[1, i]的和; int sum(int i){ int s=0; while(i>0){ s+=bit[i]; i-=lowbit(i); } return s; } //add(i, v): 将i点的值加v; void add(int i,int x){ while(i<=n){ bit[i]+=x; i+=lowbit(i); } return ; } void ini() { for(int i=n;i>=1;i--) { int t=0; for(int j=i-lowbit(i)+1;j<=i;j++) t+=bit[j]; bit[i]=t; } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ int tt; scanf("%d",&tt); add(i,tt); } while(m--){ scanf("%s%d%d",c,&x,&y); if(c[0]=='A') add(x,y); else printf("%d\n",sum(y)-sum(x-1)); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-30100.html

最新回复(0)