Pagini recente » Cod sursa (job #1998591) | Cod sursa (job #2736386) | Cod sursa (job #1179061) | Cod sursa (job #1864621) | Cod sursa (job #990869)
Cod sursa(job #990869)
#include <fstream>
#include <vector>
using std::vector;
void increase(vector<short> &aib, unsigned idx, short val){
unsigned bitmask=1,temp=aib.size()-1;
while(temp>>=1) bitmask<<=1;
while(idx<aib.size()){
aib[idx]+=val;
idx += idx&(-idx); //add the last significant digit to the number
}
}
unsigned calc(const vector<short> &aib, unsigned idx){
unsigned Sum=0;
while(idx>0){
Sum+=aib[idx];
idx -= idx&(-idx); //unset the last significant bit
}
return Sum;
}
int main(){
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
unsigned n,m;
fin>>n>>m;
vector<short> aib(n+1,0);
for(unsigned i=1;i<=n;++i){
short x; fin>>x;
increase(aib,i,x);
}
unsigned temp1,temp2;
short val;
char c;
while(m--){
fin>>c>>temp1;
if(c=='0'){ fin>>val; increase(aib,temp1,-val); }
else{ fin>>temp2; fout<<calc(aib,temp2)-calc(aib,temp1-1)<<'\n'; }
}
}