Pagini recente » Cod sursa (job #2107888) | Cod sursa (job #31895) | Cod sursa (job #1493486) | Cod sursa (job #999383) | Cod sursa (job #2310748)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, i, a[60001], v[15001], sol, x, y, cod;
void build(int nod, int st, int dr){
if(st == dr){
a[nod] = v[st];
return;
}
int mid = (st+dr)/2;
build(2*nod, st, mid);
build(2*nod+1, mid+1, dr);
a[nod] = a[2*nod] + a[2*nod+1];
}
void update(int nod, int st, int dr){
if(st == dr){
a[nod] -= y;
return;
}
int mid = (st+dr)/2;
if(mid <= x)
update(2*nod, st, mid);
else
update(2*nod+1, mid+1, dr);
a[nod] = a[2*nod] + a[2*nod+1];
}
void query(int nod, int st, int dr){
if(x <= st && dr <= y){
sol += a[nod];
return;
}
int mid = (st+dr)/2;
if(x <= mid)
query(2*nod, st, mid);
if(y > mid)
query(2*nod+1, mid+1, dr);
}
int main(){
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
build(1, 1, n);
while(m--){
fin>>cod>>x>>y;
if(cod == 0)
update(1, 1, n);
else{
sol = 0;
query(1, 1, n);
fout<<sol<<"\n";
}
}
return 0;
}