清点人数

Posted liuzz-20180701

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清点人数相关的知识,希望对你有一定的参考价值。

题目描述

思路

用一个数组记录lowbit的值

代码

#include <stdio.h>
#include <string.h>
int n, k;
char st;
int arr[500005], lowbit[500005];

void update(int x, int y) 
    while (x <= n) 
        arr[x] += y;
        x += lowbit[x];
    

int sum(int x) 
    int res = 0;
    while (x) 
        res += arr[x];
        x -= lowbit[x];
    
    return res;

int main() 
    scanf("%d %d\n", &n, &k);
    for (int i = 1; i <= n; ++i) 
        lowbit[i] = i & (-i);
    
    for (int i = 1, a, b; i <= k; ++i) 
        st = getchar();
        // putchar(st);
        if (st == 'A') 
            scanf("%d\n", &a);
            printf("%d\n", sum(a));
         else if (st == 'B') 
            scanf("%d %d\n", &a, &b);
            update(a, b);
         else 
            scanf("%d %d\n", &a, &b);
            update(a, -b);
        
    
    return 0;

以上是关于清点人数的主要内容,如果未能解决你的问题,请参考以下文章