样例都过不了
#include <iostream>
using namespace std;
const int MAX_LEN = 1e5 + 1;
void Build_Tree(int a[], int tree[], int node, int start, int end)
{
if (start == end)
{
tree[node] = a[start];
return;
}
int mid = (start + end) / 2;
int left_node = node << 1;
int right_node = (node << 1) | 1;
Build_Tree(a, tree, left_node, start, mid);
Build_Tree(a, tree, right_node, mid + 1, end);
tree[node] = tree[left_node] + tree[right_node];
}
void Update_Tree(int a[], int tree[], int node, int start, int end, int idx, int val)
{
if (start == end)
{
a[idx] += val;
tree[node] += val;
return;
}
int mid = (start + end) / 2;
int left_node = node << 1;
int right_node = (node << 1) | 1;
if (idx < mid)
Update_Tree(a, tree, left_node, start, mid, idx, val);
else
Update_Tree(a, tree, right_node, mid + 1, end, idx, val);
tree[node] = tree[left_node] + tree[right_node];
}
int Query_Tree(int a[], int tree[], int node, int start, int end, int l, int r)
{
if (end < l || start > r)
return 0;
else if (l <= start && end <= r)
return tree[node];
int mid = (start + end) / 2;
int left_node = node << 1;
int right_node = (node << 1) | 1;
return Query_Tree(a, tree, left_node, start, mid, l, r) +
Query_Tree(a, tree, right_node, mid + 1, end, l, r);
}
int main()
{
int n, m, a[MAX_LEN], tree[MAX_LEN];
cin >> n >> m;
for (int i = 1; i <= n; ++i)
cin >> a[i];
Build_Tree(a, tree, 1, 1, n);
// for (int i = 1; i <= 15; ++i)
// cout << "tree[" << i << "] = " << tree[i] << endl;
for (int i = 1; i <= m; ++i)
{
int flag;
cin >> flag;
if (flag & 1)
{
int idx, val;
cin >> idx >> val;
Update_Tree(a, tree, 1, 1, n, idx, val);
// for (int i = 1; i <= 15; ++i)
// cout << "tree[" << i << "] = " << tree[i] << endl;
}
else
{
int l, r;
cin >> l >> r;
cout << Query_Tree(a, tree, 1, 1, n, l, r) << endl;
}
}
}
//6
//1 3 5 7 9 11
//2
//1 4 6
//0 3 5