AcWing 242. 一个简单的整数问题
原题链接
简单
作者:
阿有
,
2020-10-14 11:28:13
,
所有人可见
,
阅读 504
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int num[N];
int tr[N];
int n, m;
inline int lowbit(int x){
return x & -x;
}
void add(int x, int d){
for(int i = x; i <= n; i += lowbit(i)){
tr[i] += d;
}
}
int query(int x){
int ans = num[x];
for(int i = x; i; i -= lowbit(i)){
ans += tr[i];
}
return ans;
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%d", &num[i]);
}
getchar();
for(int i=1;i<=m;i++)
{
char ch=getchar();
if (ch=='C')
{
int l,r,d;
scanf("%d%d%d\n",&l,&r,&d);
add(l,d);
add(r+1,-d);//前缀和思想
}
if (ch=='Q')
{
int x;
scanf(" %d\n",&x);
printf("%d\n",query(x));
}
}
}