Pagini recente » Cod sursa (job #208723) | Cod sursa (job #743055) | Clasament preONI 2007, Clasa a 9-a si gimnaziu | Cod sursa (job #2129226) | Cod sursa (job #3292926)
#include <bits/stdc++.h>
#define NMAX 100002
#define SQMAX 1002
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int A[NMAX];
int sumb[SQMAX];
int BLOCK_SIZE;
void update(int poz, int val) {
int blockNumber = poz / BLOCK_SIZE;
sumb[blockNumber] += val- A[poz];
A[poz] = val;
}
int query(int st, int dr) {
int sum = 0;
while (st <=dr && st%BLOCK_SIZE != 0)
sum += A[st++];
while (st + BLOCK_SIZE- 1 <= dr) {
sum += sumb[st /BLOCK_SIZE];
st += BLOCK_SIZE;
}
while (st <= dr)
sum += A[st++];
return sum;
}
int main (){
int i, st, dr, val, poz, nr, n;
int ch;
cin>>n >> nr;
for (i=0; i<n; i++)
cin>>A[i];
BLOCK_SIZE=(int) sqrt(n);
int nrb=-1;
for (i=0; i<n; i++) {
if (i%BLOCK_SIZE==0)
nrb++;
sumb[nrb]+=A[i];
}
for (i=0; i<nr; i++) {
cin>>ch;
if (ch== 0) {
cin>>poz>>val;
poz--;
update(poz,val);
}
else {
cin>>st>>dr;
st--;
dr--;
cout<<query(st,dr)<<'\n';
}
}
return 0;
}