Pagini recente » Istoria paginii utilizator/onebit1024 | Istoria paginii utilizator/mihneac828 | Monitorul de evaluare | Istoria paginii utilizator/abdulfatah | Cod sursa (job #2123669)
#include <iostream>
#include <bits/stdc++.h>
#define INFILE "datorii.in"
#define OUTFILE "datorii.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
int N,M;
vector<int> arb;
void buildTree(int maxN){
for(int i=maxN-1;i>0;i--)
arb[i]=arb[2*i]+arb[2*i+1];
}
void update(int poz,int valSc,int maxN){
poz+=maxN;
arb[poz]-=valSc;
for(int i=poz/2;i>=1;i/=2)
arb[i]=(arb[2*i]+arb[2*i+1]);
}
int querry(int st,int dr,int maxN){
st+=maxN;
dr+=maxN;
int rez=0;
for(int s=st,d=dr;s<d;s/=2,d/=2){
// cout<<s<<" "<<d<<"\n";
if(s%2) rez+=arb[s++];
if(d%2) rez+=arb[--d];
// cout<<rez<<"\n";
}
return rez;
}
void Read(){
in>>N>>M;
arb.resize(2*N+1);
for(int i=0;i<N;i++){
int x;
in>>x;
arb[N+i]=x;
}
buildTree(N);
}
void Determinare(){
for(int i=1;i<=M;i++){
int tip;
in>>tip;
if(tip==1){
int l,r;
in>>l>>r;
l--;
r--;
//cout<<l<<" "<<r<<querry(l,r+1,N)<<"\n";
out<<querry(l,r+1,N)<<"\n";
}
else if(tip==0){
int p,val;
in>>p>>val;
p--;
update(p,val,N);
}
}
}
int main()
{
Read();
Determinare();
return 0;
}