Pagini recente » Cod sursa (job #481626) | Cod sursa (job #249390) | Cod sursa (job #115873) | Cod sursa (job #2776236) | Cod sursa (job #903206)
Cod sursa(job #903206)
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int maxn = 15002;
int N, M;
int sume[maxn];
void update(int val, int ind)
{
int poz = 0;
while (ind <= N)
{
sume[ind] += val;
while ((ind & (1 << poz)) == 0) ++poz;
ind += (1 << poz);
poz++;
}
}
int findSum(int ind)
{
int poz = 0, sum = 0;
while (ind > 0)
{
sum += sume[ind];
while ((ind & (1 << poz)) == 0) ++poz;
ind -= (1 << poz);
poz++;
}
return sum;
}
int query(int st, int dr)
{
return findSum(dr) - findSum(st-1);
}
int main()
{
in >> N >> M; int cod, x, y;
for (int i = 1; i <= N; i++) { in >> x; update(x, i); }
for (int i = 1; i <= M; i++)
{
in >> cod;
if (cod == 0) {
in >> x >> y;
update(-y, x);
}
else {
in >> x >> y;
out << query(x, y) << '\n';
}
}
return 0;
}