Pagini recente » Cod sursa (job #1195757) | Cod sursa (job #2439210) | Romanian IOI Medalists: Careers | Cod sursa (job #1071292) | Cod sursa (job #168975)
Cod sursa(job #168975)
#include<fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
#define Max 15000
int a[5*Max],n,poz,start,end,val,sum;
void modi(int,int,int);
void suma(int,int,int);
int main()
{
int k,t;
fin>>n>>t;
for(poz=1;poz<=n;poz++)
{
fin>>val;
modi(1,1,n);
}
while(t--)
{
fin>>k;
switch(k)
{
case 0: fin>>poz>>val; val=-val; modi(1,1,n); break;
case 1: fin>>start>>end; sum=0; suma(1,1,n); fout<<sum<<'\n';
}
}
return 0;
}
void modi(int k,int i,int j)
{
if(i==j)
{
a[k]+=val;
return;
}
int mij=(i+j)/2;
if(poz<=mij) modi(2*k,i,mij);
else modi(2*k+1,mij+1,j);
a[k]=a[2*k]+a[2*k+1];
}
void suma(int k,int i,int j)
{
if(start<=i&&j<=end)
{
sum+=a[k];
return;
}
int mij=(i+j)/2;
if(start<=mij) suma(2*k,i,mij);
if(mij<end) suma(2*k+1,mij+1,j);
}