Cod sursa(job #880982)

Utilizator Detrol2kGuianu Leon Detrol2k Data 17 februarie 2013 16:18:17
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;

int n, v[20000];

void add(int poz, int val)
{
	while(poz <= n)
	{
		v[poz] += val;
		poz += (poz^(poz-1))&poz;
	}
}

int query(int poz)
{
	int sum = 0;
	
	while(poz >= 1)
	{
		sum += v[poz];
		poz -= (poz^(poz-1))&poz;
	}
	
	return sum;
}

int main()
{
	FILE *fin=fopen("datorii.in","r");
	FILE *fout=fopen("datorii.out","w");
	
	int i, m, tip, a, b, aux;		


	//Read
	fscanf(fin,"%d %d",&n,&m);
	for(i=1; i<=n; i++)	
	{
		fscanf(fin,"%d",&aux);		
		add(i,aux);
	}	

	
	
	//Compute
	for(i=1; i<=m; i++)
	{
		fscanf(fin,"%d %d %d \n",&tip,&a,&b);	
		if(tip == 0)
			add(b,-a);
		else
			fprintf(fout,"%d \n",query(b)-query(a-1));
	}	
}