Pagini recente » Cod sursa (job #1331758) | Cod sursa (job #1056599) | Cod sursa (job #1293709) | Cod sursa (job #1912766) | Cod sursa (job #921947)
Cod sursa(job #921947)
#include <stdio.h>
using namespace std;
#define Nmax 15005
int n, m;
int aib[Nmax];
inline int nrZ(int x){ // returneaza 2 al puterea celui mai nesemnificativ bit de 1
return ( (x&(x-1))^x );
}
inline void update(int ind, int val, int sign){
while(ind <= n){
aib[ind] += (val*sign);
ind += nrZ(ind);
}
}
void read(){
int x;
scanf("%i %i", &n, &m);
for(int i = 1; i <= n; ++i){
scanf("%i", &x);
update(i, x, 1);
}
}
inline int query(int x){ // returneaza suma elementelor din intervalul [1,x];
int s = 0;
while(x > 0){
s += aib[x];
x -= nrZ(x);
}
return s;
}
void solve(){
int op, a, b;
for(int i = 1; i <= m; ++i){
scanf("%i %i %i", &op, &a, &b);
if(op == 0)
update(a, b, -1);
if(op == 1)
printf("%i\n", query(b) - query(a-1));
}
}
int main(){
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
read();
solve();
}