Pagini recente » Cod sursa (job #2721913) | Cod sursa (job #2546616) | Cod sursa (job #1319605) | Cod sursa (job #2482383) | Cod sursa (job #480901)
Cod sursa(job #480901)
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
#define FILE_IN "datorii.in"
#define FILE_OUT "datorii.out"
int N, M;
int A[12][16384];
void achitare(int zi, int suma)
{
for (int i=0; i<=12; i++)
{
A[i][zi >> i] -= suma;
}
}
int interog(int p, int q, int niv, int offs)
{
int l = offs*(1 << niv);
int r = l+(1 << niv)-1;
if ((q<l) || (p>r)) return 0;
if ((p<=l) && (q>=r)) return A[niv][offs];
return interog(p, q, niv-1, 2*offs)+interog(p, q, niv-1, 2*offs+1);
}
int interogare(int p, int q)
{
return interog(p, q, 12, 0);
}
void genarb()
{
for (int i=1; i<=12; i++)
for (int j=0; j<(16384 >> i); j++)
A[i][j] = A[i-1][j << 1]+A[i-1][(j << 1) +1];
}
int main()
{
ifstream fisIn(FILE_IN);
ofstream fisOut(FILE_OUT);
fisIn >> N >> M;
for (int i=0; i<N; i++) fisIn >> A[0][i];
for (int i=N; i<16384; i++) A[0][i] = 0;
genarb();
for (int i=0; i<M; i++)
{
int codOp, arg1, arg2;
fisIn >> codOp >> arg1 >> arg2;
if (codOp == 0) achitare(arg1-1, arg2);
if (codOp == 1) fisOut << interogare(arg1-1, arg2-1) << "\n";
}
}