Pagini recente » Cod sursa (job #1213287) | Cod sursa (job #2522673) | Cod sursa (job #2291365) | Cod sursa (job #49111) | Cod sursa (job #2157171)
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
#define MAX 15005
int n, m, v[MAX], o, x, y, aint[4 * MAX], q;
void arbore(int k, int a, int b)
{
if(a == b)
{
aint[k] = v[a];
return;
}
int mij = (a + b) / 2;
arbore(2 * k, a, mij);
arbore(2 * k + 1, mij + 1, b);
aint[k] = aint[2 * k] + aint[2 * k + 1];
}
void query(int k, int a, int b)
{
if(a >= x and b <= y)
{
q += aint[k];
return;
}
int mij = (a + b) / 2;
if(x <= mij)
{
query(2 * k, a, mij);
}
if(y > mij)
{
query(2 * k + 1, mij + 1, b);
}
aint[k] = aint[2 * k] + aint[2 * k + 1];
}
void update(int k, int a, int b)
{
if(b == a)
{
aint[k] -= y;
return;
}
int mij = (a + b) / 2;
if(x <= mij)
{
update(2 * k, a, mij);
}
else
{
update(2 * k + 1, mij + 1, b);
}
aint[k] = aint[2 * k] + aint[2 * k + 1];
}
int main()
{
cin.sync_with_stdio(false);
cin >> n >> m;
for(int i = 1; i <= n; ++i)
{
cin >> v[i];
}
arbore(1, 1, n);
for(int i = 1; i <= m; ++i)
{
cin >> o >> x >> y;
if(o == 0)
{
update(1, 1, n);
}
else
{
q = 0;
query(1, 1, n);
cout << q << '\n';
}
}
return 0;
}