比赛 |
板子大赛 |
评测结果 |
AAAAAAAAAA |
题目名称 |
求和问题 |
最终得分 |
100 |
用户昵称 |
zhm |
运行时间 |
0.663 s |
代码语言 |
C++ |
内存使用 |
1.74 MiB |
提交时间 |
2025-01-22 09:25:37 |
显示代码纯文本
#include <cstdio>
#define le(z) (2 * z)
#define ri(z) (2 * z + 1)
const int N = 1e4;
int n, m;
typedef unsigned long long ull;
int a[N+5];
ull segt[4*N+5];
void build(int z, int l, int r)
{
if (l == r) {
segt[z] = a[l];
return ;
}
int mid = (l + r) / 2;
build(le(z), l, mid);
build(ri(z), mid + 1, r);
segt[z] = segt[le(z)] + segt[ri(z)];
}
ull sum(int z, int l, int r, int x, int y)
{
if (x <= l && r <= y) return segt[z];
if (y < l || x > r) return 0;
int mid = (l + r) / 2;
ull ret = 0;
if (x <= mid) ret += sum(le(z), l, mid, x, y);
if (y >= mid + 1) ret += sum(ri(z), mid + 1, r, x, y);
return ret;
}
int main(void)
{
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
scanf("%d", &m);
build(1, 1, n);
for (int i = 1; i <= m; i++) {
int x, y;
scanf("%d %d", &x, &y);
printf("%llu\n", sum(1, 1, n, x, y));
}
fclose(stdin);
fclose(stdout);
return 0;
}