Cod sursa(job #531068)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 8 februarie 2011 21:02:32
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
# include <fstream>
  using namespace std;
    std :: ifstream f ("datorii.in");
	std :: ofstream g ("datorii.out");
	int n, m, a[20000], cit;
	inline int zero (int a){
		return a&-a;
	}
	void adauga (int poz, int val){
		for (int i = poz; i <= n; i += zero (i) )
			a[i] += val;
	}
	inline int max (int a, int b){
		return (a > b ? a : b);
	}
	void scade (int poz, int val){
		for (int i = poz; i <= n; i += zero (i) )
			a[i] = max (a[i] - val, 0);
	}
	inline int suma (int poz){
		int s = 0;
		for (int i = poz; i > 0; i -= zero (i) )
			s += a[i];
		return s;
	}
	int intrebare, T, V, P, Q;
	int main (){
		f >> n >> m;
		for (int i = 1; i <= n; ++i){
			f >> cit;
			adauga (i, cit);
		}
		for (; m > 0; --m){
			f >> intrebare;
			if (intrebare == 0){
				f >> T >> V;
				scade (T, V);
				continue ;
			}
			f >> P >> Q;
			g << suma (Q) - suma (P - 1) << '\n';
		}
		g.close ();
		return 0;
	}