Pagini recente » Cod sursa (job #161277) | Cod sursa (job #2761124) | **** | Cod sursa (job #158469) | Cod sursa (job #1707843)
#include <fstream>
#define InFile "datorii.in"
#define OutFile "datorii.out"
#define MAX 100001
using namespace std;
int sum1 (int position);
void sum2 (int position, int value);
unsigned short int N;
unsigned int M;
int A[MAX];
bool type;
unsigned int T, V, P, Q;
int tree[MAX];
unsigned int i, j;
unsigned int sum;
int lsb(int x)
{
return x & (-x);
}
int main ()
{
ifstream fin (InFile);
ofstream fout (OutFile);
fin >> N >> M;
for (i=1; i<=N; i++)
{
fin >> A[i];
sum2(i,A[i]);
}
for (i=1; i<=M; i++)
{
fin >> type;
if (type == 0)
{
fin >> T >> V;
/// BUG
A[T] -= V;
sum2(j,-V);
}
else
{
fin >> P >> Q;
sum = sum1(Q) - sum1(P-1);
fout << sum << '\n';
}
}
fin.close();
fout.close();
return 0;
}
int sum1 (int position)
{
int sum=0;
while (position > 0)
{
sum += tree[position];
position -= lsb(position);
}
return sum;
}
void sum2 (int position, int value)
{
while (position <= N)
{
tree[position] += value;
position += lsb(position);
}
}