比赛 线段数树状数组 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作B 最终得分 100
用户昵称 忆轩 运行时间 0.498 s
代码语言 C++ 内存使用 1.81 MiB
提交时间 2018-06-17 10:37:22
显示代码纯文本
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cmath>
#define lowbit(x) x&(-x)
using namespace std;
int a, b, k, tmp, n, m;
int c[400001];
char ch[6];
void ADD(int p, int x) {
	while(p <= n) {
		c[p] += x;
		p += lowbit(p);
	}
}
void add(int p, int x) {
	while(p <= n) {
		c[p] -= x;
		p += lowbit(p);
	}
}
int ask(int p) {
	int t = 0;
	while(p > 0) {
		t += c[p];
		p -= lowbit(p);
	}
	return t;
}
int main() {
	freopen("shulieb.in", "r", stdin);
	freopen("shulieb.out", "w", stdout);
	scanf("%d", &n);
	tmp = 0;
	for(int i = 1; i <= n; i++) {
		scanf("%d", &a);
		ADD(i, a-tmp);
		tmp = a;
	}
	scanf("%d", &m);
	for(int i = 1; i <= m; i++) {
		scanf("%s", ch);
		if(ch[0]=='Q') {
			scanf("%d", &a);
			printf("%d\n", ask(a));
			continue;
		}
		scanf("%d%d%d", &a, &b, &k);
		ADD(a, k);
		add(b+1, k);
	}
	return 0;
}