Pagini recente » Cod sursa (job #2178844) | Cod sursa (job #1816712) | Cod sursa (job #1114784) | Cod sursa (job #2421116) | Cod sursa (job #828982)
Cod sursa(job #828982)
#include <cstdio>
using namespace std;
int n, m, arb[32768], a, b;
void bagaMare(int nod, int stg, int dpt)
{
if (stg == dpt)
{
arb[nod] += b;
return;
}
int mij = (stg+dpt)>>1, fiu = nod<<1;
if (a <= mij) bagaMare(fiu, stg, mij);
else bagaMare(fiu+1, mij+1, dpt);
arb[nod] = arb[fiu] + arb[fiu+1];
}
int spuneCaTeTai(int nod, int stg, int dpt)
{
if (a <= stg && dpt <= b)
{
return arb[nod];
}
int s = 0, mij = (stg+dpt)>>1, fiu = nod<<1;
if (a <= mij)
s += spuneCaTeTai(fiu, stg, mij);
if (mij < b)
s += spuneCaTeTai(fiu+1, mij+1, dpt);
return s;
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int i, c;
for (i=1;i<=n;++i)
{
scanf("%d", &b);
a = i;
bagaMare(1, 1, n);
}
for (i=1;i<=m;++i)
{
scanf("%d%d%d", &c, &a, &b);
if (!c)
{
b *= -1;
bagaMare(1, 1, n);
}
else printf("%d\n", spuneCaTeTai(1, 1, n));
}
return 0;
}