Pagini recente » Cod sursa (job #2947251) | Cod sursa (job #1878613) | Cod sursa (job #1806123) | Cod sursa (job #1096370) | Cod sursa (job #2030855)
#include <fstream>
#define in "aib.in"
#define out "aib.out"
#define N 100003
using namespace std;
ifstream fin(in);
ofstream fout(out);
int n,m,val,poz,heap[4*N];
inline void actualizare(int nod,int st,int dr)
{
if(st == dr)
{
heap[nod] += val;
}
else
{
int mij = (st+dr)/2;
if(poz <=mij) actualizare(nod*2,st,mij);
if(poz > mij) actualizare(nod*2+1,mij+1,dr);
heap[nod] = heap[nod*2] + heap[nod*2+1];
}
}
inline int suma(const int &nod,const int &a,const int &b,int st,int dr)
{
if(st>=a && dr<=b) return heap[nod];
else
{
int S = 0;
const int mij = (st+dr)/2;
if(a <= mij) S += suma(2*nod,a,b,st,mij);
if(mij < b) S += suma(2*nod+1,a,b,mij+1,dr);
return S;
}
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; ++i)
{
fin>>val;
poz = i;
actualizare(1,1,n);
}
int p,a,b;
while(m--)
{
fin>>p;
if(p == 0)
{
fin>>a>>b;
poz = a;
val = b;
actualizare(1,1,n);
}
else if(p == 1)
{
fin>>a>>b;
fout<<suma(1,a,b,1,n)<<"\n";
}
else if(p == 2)
{
fin>>a;
}
}
fin.close(); fout.close();
return 0;
}