记录编号 |
166192 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
啊吧啦吧啦吧 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.154 s |
提交时间 |
2015-06-14 15:23:18 |
内存使用 |
0.67 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
const int MAXN = 100001;
int n, m, c[MAXN] = {0}, lobit(int), ask(int), qread();
void update(int, int), print(int, int), init();
main()
{
freopen("shulie.in", "r", stdin);
freopen("shulie.out", "w", stdout);
init();
fclose(stdin);
fclose(stdout);
}
int lobit(int x)
{
return x & (-x);
}
void update(int i, int x)
{
while(i <= n)
{
c[i] += x;
i += lobit(i);
}
}
void print(int l, int r)
{
printf("%d\n", ask(r) - ask(l - 1));
}
void init()
{
n = qread();
for(int i = 1; i <= n; i ++)
{
int x;
x = qread();
update(i, x);
}
m = qread();
for(; m --;)
{
char c = 0;
int a, b;
do
c = getchar();
while(c != 'A' && c != 'S');
a = qread();
b = qread();
if(c == 'A')
update(a, b);
else if(c == 'S')
print(a, b);
}
}
int ask(int x)
{
int ans = 0;
for(int i = x; i > 0; i -= lobit(i))
ans += c[i];
return ans;
}
int qread()
{
int ans = 0;
char ch;
do
ch = getchar();
while(ch < '0' || ch > '9');
do
{
ans = ans * 10 + ch - '0';
ch = getchar();
}
while(ch >= '0' && ch <= '9');
return ans;
}