Skip to content

Instantly share code, notes, and snippets.

@sfalexrog
Created September 29, 2016 18:32
Show Gist options
  • Save sfalexrog/ce868c7288f19252b423251d01a39a34 to your computer and use it in GitHub Desktop.
Save sfalexrog/ce868c7288f19252b423251d01a39a34 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <vector>
using namespace std;
std::vector<long long> t(4 * 100000);
void build(int v, int vl, int vr)
{
if (vl == vr)
{
t[v] = 0;
return;
}
int vm = vl + (vr - vl) / 2;
build(2 * v + 1, vl, vm);
build(2 * v + 2, vm + 1, vr);
t[v] = t[2 * v + 1] + t[2 * v + 2];
}
long long query(int v, int vl, int vr, int l, int r)
{
if (r < vl || l > vr)
{
return 0;
}
if (l <= vl && vr <= r)
{
return t[v];
}
int vm = vl + (vr - vl) / 2;
long long ql = query(2 * v + 1, vl, vm, l, r);
long long qr = query(2 * v + 2, vm + 1, vr, l, r);
return ql + qr;
}
void modify(int v, int vl, int vr, int pos, int value)
{
if (vl == vr)
{
t[v] = value;
return;
}
int vm = vl + (vr - vl) / 2;
if (pos <= vm)
{
modify(2 * v + 1, vl, vm, pos, value);
}
else
{
modify(2 * v + 2, vm + 1, vr, pos, value);
}
t[v] = t [2 * v + 1] + t[2 * v + 2];
}
int main()
{
int n, m;
std::cin >> n >> m;
build(0, 0, n);
for (int i = 0; i < m; i++)
{
char command;
int arg1, arg2;
std::cin >> command >> arg1 >> arg2;
switch(command)
{
case 'A':
modify(0, 0, n, arg1, arg2);
break;
case 'Q':
std::cout << query(0, 0, n, arg1, arg2);
break;
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment