nyoj-123-士兵杀敌(四)

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<math.h>
 5 using namespace std;
 6 int tree[1000010],t,m,i;
 7 int main()
 8 {
 9     void add(int left,int num);
10     int getsum(int end);
11     while(scanf("%d%d",&t,&m)!=EOF)
12     {
13         int a,b1,b2,b3;
14         char ch[10];
15         memset(tree,0,sizeof(tree));
16         for(i=0;i<t;i++)
17         {
18             scanf("%s",ch);
19             if(ch[0]=='A')
20             {
21                 scanf("%d%d%d",&b1,&b2,&b3);
22                 add(b1,b3);
23                 add(b2+1,-b3);
24             }
25             else
26             {
27                 scanf("%d",&b1);
28                 printf("%d
",getsum(b1));
29             }
30         }
31     }
32     return 0;
33 }
34 int lowbit(int n)
35 {
36     return n&(-n);
37 }
38 void add(int left,int num)
39 {
40     while(left<=m)
41     {
42         tree[left]+=num;
43         left+=lowbit(left);
44     }
45 }
46 int getsum(int end)
47 {
48     int sum=0;
49     while(end>0)
50     {
51         sum+=tree[end];
52         end-=lowbit(end);
53     }
54     return sum;
55 }
原文地址:https://www.cnblogs.com/nylg-haozi/p/3193822.html