Pagini recente » Cod sursa (job #710769) | Cod sursa (job #1536427) | Cod sursa (job #206857) | Cod sursa (job #2238175) | Cod sursa (job #1256247)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("datorii.in");
ofstream out("datorii.out");
int n,y,k, i, zerouri[15001], numere[15001], m,tot,d,doi[21];
k = 2;
doi[0] = 1;
for (i = 1; i <= 20; i++)
{
doi[i] = k;
k = k * 2;
}
unsigned int t,x,xa,ya;
in >> n;
in >> m;
for (t = 1; t <= 15000; t++)
{
numere[t] = 0;
x = t;
k = 0;
while (((x & 1) == 0) && ((x | 0) != 0)){ k++; x=x >> 1; }
zerouri[t] = k;
}
for (i = 1; i <= n; i++)
{
in >> t;
for (x = i; x <= n; x += k)
{
numere[x] += t;
k = doi[zerouri[x]];
}
}
for (d = 1; d <= m; d++)
{
in >> t;
if (t == 0)
{
in >> x;
in >> y;
for (i = x; i <= n; i+=k)
{
numere[i] -= y;
k = doi[zerouri[i]];
}
}
else
{
tot = 0;
in >> xa;
in >> ya;
x = xa-1;
while (x > 0)
{
tot -= numere[x];
x -= doi[zerouri[x]];
}
x = ya;
while (x > 0)
{
tot += numere[x];
x-=doi[zerouri[x]];
}
out << tot << "\n";
}
}
return 0;
}