Pagini recente » Cod sursa (job #1953002) | Cod sursa (job #3040137) | Cod sursa (job #2838162) | Cod sursa (job #2502417) | Cod sursa (job #2467149)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int arb[31000];
void achitare(int poz, int val, int n)
{
int i = 1, l = 1, r = n;
while(l < r){
arb[i] -= val;
if(poz <= (l + r)/2) i *= 2, r = (l + r)/2;
else i = 2*i + 1, l = (l + r)/2 + 1;
}
arb[i] -= val;
}
int interogare(int p, int q, int n)
{
int i = 1, j, l = 1, r = n, s, laux, raux;
while(p > (l + r)/2 || q <=(l + r)/2){
if(q <= (l + r)/2) i *= 2, r = (l + r)/2;
if(p > (l + r)/2) i = i*2 + 1, l = (l + r)/2 +1;
}
s = arb[i]; j = i; laux = l, raux = r;
i *= 2; r = (l + r)/2;
while(l < r){
if(p > (l + r)/2){
s -= arb[2*i];
i = 2*i + 1;
l = (l + r)/2 + 1;
}
else i *= 2; r = (l + r)/2;
}
i = j*2 + 1; r = raux, l = (laux + r)/2 + 1;
while(l < r){
if(q <= (l + r)/2){
s -= arb[2*i + 1];
i *= 2; r = (l + r)/2;
}
else i = 2*i + 1; l = (l + r)/2 + 1;
}
return s;
}
int main()
{
int n, m, i, x, y, t;
fin >> n >> m;
for(i = 1; i <= n; i++){
fin >> x; achitare(i, -x, n);
}
for(i = 1; i <= m; i++){
fin >> t >> x >> y;
if(!t) achitare(x, y, n);
else fout << interogare(x, y, n) << "\n";
}
return 0;
}