Pagini recente » Cod sursa (job #865373) | Cod sursa (job #2439529) | Cod sursa (job #1499385) | Cod sursa (job #1884916) | Cod sursa (job #612415)
Cod sursa(job #612415)
#include<fstream>
using namespace std;
int n,N,m,A[40010];
int a,b,suma;
void ConstruireArbore()
{
int i;
for(i=N-1;i>0;i--)
A[i]=A[2*i]+A[2*i+1];
}
void Query(int nod,int st,int dr)
{
if(a<=st && dr<=b)
{
suma=suma+A[nod];
return;
}
int mij=(st+dr)/2;
if(a<=mij) Query(2*nod,st,mij);
if(mij+1<=b) Query(2*nod+1,mij+1,dr);
}
void Update()
{
int k=N+a-1;
A[k]-=b;
k=k/2;
while(k>0)
{
A[k]=A[2*k]+A[2*k+1];
k=k/2;
}
}
int main()
{
int i,op;
ifstream fin("datorii.in");
fin>>n>>m;
N=1;
while(n>N)
N=N*2;
for(i=1;i<=n;i++)
fin>>A[N+i-1];
ConstruireArbore();
ofstream fout("datorii.out");
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op==1)
{
suma=0;
Query(1,1,N);
fout<<suma<<"\n";
}
else
Update();
}
fin.close();
fout.close();
return 0;
}