Pagini recente » Cod sursa (job #1184809) | Cod sursa (job #1736566) | Cod sursa (job #2481672) | Cod sursa (job #2075271) | Cod sursa (job #2461946)
#include <bits/stdc++.h>
#define NM 15005
#define iii int,int,int
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,a,b,sum,ai[NM];
void Read();
void Solve();
void MakeAi(iii);
void Update(iii);
void Query(iii);
int main()
{ Read();
Solve();
f.close();
g.close();
return 0;
}
void Read()
{ f>>n>>m;
for(int i=1; i<=n; i++)
{ a=i;
f>>b;
MakeAi(1,1,n);
}
}
void Solve()
{ for(int t; m; m--)
{ f>>t>>a>>b;
if(t)
{ sum=0;
Query(1,1,n);
g<<sum<<'\n';
}
else
Update(1,1,n);
}
}
void MakeAi(int nod,int st,int dr)
{ if(st==dr)
ai[nod]=b;
else
{ int mij=(st+dr)/2;
if(a>=st && a<=mij)
MakeAi(2*nod,st,mij);
else
MakeAi(2*nod+1,mij+1,dr);
ai[nod]+=b;
}
}
void Update(int nod,int st,int dr)
{ if(st==dr)
ai[nod]-=b;
else
{ int mij=(st+dr)/2;
if(a>=st && a<=mij)
Update(2*nod,st,mij);
else
Update(2*nod+1,mij+1,dr);
ai[nod]-=b;
}
}
void Query(int nod,int st,int dr)
{ if(st>=a && dr<=b)
sum+=ai[nod];
else
{ int mij=(st+dr)/2;
if(a<=mij)
Query(2*nod,st,mij);
if(mij<b)
Query(2*nod+1,mij+1,dr);
}
}