Cod sursa(job #641190)

Utilizator cosminx2003Cosmin Clapon cosminx2003 Data 27 noiembrie 2011 15:23:45
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
#define N 15001
#define zero(n) ((n^(n-1))&n)

using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");

void update(int val,int poz,int *t,int n);
int query(int i,int j,int *t);

int main() {
	int t[N],i,n,m,k=0,op,a,b,nr;
	
	f>>n>>m;
	for(i=1;i<=n;i++) {
		f>>nr;
		update(nr,i,t,n);
	}
	for(i=1;i<=m;i++) {
		f>>op>>a>>b;
		if(op) {
			g<<query(b,a,t)<<"\n";
		} else {
			update(-b,a,t,n);
		}
	}
	
	return 0;
}

void update(int val,int poz,int *t,int n) {
	int k;
	for(k=poz;k<=n;k+=zero(k)) {
		t[k]+=val;
	}
}

int query(int i,int j,int *t) {
	int k,s1=0,s2=0;
	for(k=i;k>0;k-=zero(k)) {
		s1+=t[k];
	}
	for(k=j-1;k>0;k-=zero(k)) {
		s2+=t[k];
	}
	return s1-s2;
}