清点人数
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;
以上是关于清点人数的主要内容,如果未能解决你的问题,请参考以下文章
韩信点兵 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排五人一排七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾