Pagini recente » Cod sursa (job #2656376) | Cod sursa (job #2353632) | Cod sursa (job #2081734) | Cod sursa (job #2545551) | Cod sursa (job #1944283)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct el
{
int st,dr,val;
}v[50003];
int n,m,p,q,x;
bool t;
void preformatare(int st,int dr,int poz)
{
v[poz].st=st;
v[poz].dr=dr;
if(st!=dr)
{
preformatare(st,(st+dr)/2,2*poz);
preformatare((st+dr)/2+1,dr,2*poz+1);
}
}
void adauga(int i,int val,int poz)
{
while(v[poz].st!=v[poz].dr)
{
v[poz].val+=val;
if(v[2*poz].dr>=i)
poz=2*poz;
else
poz=2*poz+1;
}
v[poz].val+=val;
}
int suma(int st,int dr,int poz)
{
if(v[poz].st>=st&&v[poz].dr<=dr)
return v[poz].val;
else
{
int sum=0;
if((v[2*poz].dr>=st&&v[2*poz].st<=dr) || (v[2*poz].st<=dr&&v[2*poz].dr>=st))
sum+=suma(st,dr,2*poz);
if((v[2*poz+1].dr>=st&&v[2*poz+1].st<=dr) || (v[2*poz+1].st<=dr&&v[2*poz+1].dr>=st))
sum+=suma(st,dr,2*poz+1);
return sum;
}
}
int main()
{
fin>>n>>m;
preformatare(1,n,1);
for(int i=1;i<=n;i++)
{
fin>>x;
adauga(i,x,1);
}
for(int i=1;i<=m;i++)
{
fin>>t>>p>>q;
if(t==0)
adauga(p,-q,1);
else
fout<<suma(p,q,1)<<"\n";
}
return 0;
}