Pagini recente » Cod sursa (job #2340278) | Cod sursa (job #2964458) | Cod sursa (job #556808) | Cod sursa (job #1841445) | Cod sursa (job #2367253)
#include <bits/stdc++.h>
#define MAXN (1<<19)
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,poz,val,v[MAXN],m,s,a,b;
bool ok;
void construire (int nod, int st, int dr)
{ if(st==dr) v[nod]+=val;
else
{ int mij=(st+dr)/2;
if(poz<=mij) construire(2*nod,st,mij);
if(poz>mij) construire(2*nod+1,mij+1,dr);
v[nod]=v[2*nod]+v[2*nod+1];
}
}
void afisare (int nod,int st, int dr)
{ if(a<=st && dr<=b) { s+=v[nod];
return ;
}
else
{ int mij=(st+dr)/2;
if(mij>=a) afisare(2*nod,st,mij);
if(mij<b) afisare(2*nod+1,mij+1,dr);
}
}
int main()
{ f>>n>>m;
for(int i=1;i<=n;i++)
{ f>>val;
poz=i;
construire(1,1,n);
}
for(int i=1;i<=m;i++)
{ f>>ok>>a>>b;
s=0;
if(ok==1)
{ afisare(1,1,n);
g<<s<<'\n';
}
else
{ poz=a;
val=(-1)*b;
construire(1,1,n);
}
}
return 0;
}