Cod sursa(job #855428)

Utilizator OpportunityVlad Negura Opportunity Data 14 ianuarie 2013 22:39:15
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <fstream>
using namespace std;

ifstream fi("datorii.in");
ofstream fo("datorii.out");

long n,m,i,j,a[100000],op,x,y;

void scade(long poz,long val){
	long z=0;
	a[poz]-=val;
	while (poz<=n){
		while (!(poz & 1<<z)) z++;
		poz+=1<<z;
		a[poz]-=val;
	}
}

long get(long x){
	long aux=a[x],z=0;
	while (x){
		while (!(x & 1<<z)) z++;
		x-=1<<z;
		aux+=a[x];
	}
	return aux;
}

long suma(long st,long dr){
	return (get(dr)-get(st-1));
}

int main(){
	fi >> n >> m;
	
	for (i=1; i<=n; i++){
		fi >> x;
		scade(i,x*-1);
	}

	for (i=1; i<=m; i++){
		fi >> op >> x >> y;
		if (op) fo << suma(x,y) << "\n"; else scade(x,y);
	}
	
	return 0;
}