Pagini recente » Cod sursa (job #344831) | Cod sursa (job #2285679) | Cod sursa (job #347799) | Cod sursa (job #1767869) | Cod sursa (job #2500425)
#include <bits/stdc++.h>
#define N 100005
using namespace std;
ifstream fi("datorii.in");
ofstream fo ("datorii.out");
int n, m, op, ans = -1, x, y;
int A[3 * N];
void Intrebare(int pos, int st, int dr)
{
int mij = (st + dr) / 2;
if (st >= x && dr <= y) ans += A[pos];
else
{
if (x <= mij && st != dr)
Intrebare(2 * pos, st, mij);
if (y >= mij + 1 && st != dr)
Intrebare(2 * pos + 1, mij + 1, dr);
}
}
void Constructie(int pos, int st, int dr)
{
int mij = (st + dr) / 2;
if (st == dr)
{
A[pos] = y;
return;
}
if (x <= mij)
Constructie(2 * pos, st, mij);
else
Constructie(2 * pos + 1, mij + 1, dr);
A[pos] = A[2 * pos] + A[2 * pos + 1];
}
void Actualizare(int pos, int st, int dr)
{
int mij = (st + dr) / 2;
if (st == dr)
{
A[pos] -=y;
return;
}
if (x <= mij)
Actualizare(2 * pos, st, mij);
else
Actualizare(2 * pos + 1, mij + 1, dr);
A[pos] = A[2 * pos] + A[2 * pos + 1];
}
int main()
{
fi >> n >> m;
for (int i = 1; i <= n; i++)
{
fi >> y;
x = i;
Constructie(1, 1, n);
}
for (int i = 1; i <= m; i++)
{
fi >> op >> x >> y;
if (op)
{
ans = 0;
Intrebare(1, 1, n);
fo << ans << "\n";
}
else
Actualizare(1, 1, n);
/*fo << '\n';
for(int i=1; i<=2*n+1; i++)
fo << " " << A[i];
fo << '\n';fo << '\n';*/
}
return 0;
}