Cod sursa(job #230453)

Utilizator eferLiviu Ciortea efer Data 13 decembrie 2008 23:03:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <sstream>
#include <numeric>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <cassert>
#include <ctime>
#include <cstdlib>
// #include <classic_algorithms>
// #include <creativity>
using namespace std;

#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REPV(i, a, b) for (int i = (a); i <= (b); ++i)
#define REPIT(it, v) for(it = v.begin(); it != v.end(); ++it)
#define REPD(i, n) for (int i = (n) - 1; i >= 0; --i)
#define REPVD(i, b, a) for (int i = (b); i >= (a); --i)

#define SZ(a) ((int)a.size())
#define PB push_back
#define ALL(x) (x).begin(), (x).end()
#define MP make_pair
#define X first
#define Y second

#define CLR(t) memset((t), 0, sizeof(t))
#define CPY(dest, source) memcpy((dest), (source), sizeof(source))
#define MSET(t, v) memset((t), v, sizeof(t))

typedef long long LL; 
typedef vector<int> VI; 
typedef istringstream ISS;
typedef vector<string> VS;
typedef pair<int, int> PII;
template<class T> ostream& operator<<(ostream& os, const vector<T>& a) { int i = 0, n = a.size(); for(;i<n;++i) os<<a[i]<<','; os<<endl; return os; }

const int MAXN = 1 << 14;
int N;
LL sum[MAXN];

void add(int n, LL delta) {
	while (n <= N) {
		sum[n] += delta;
		n = (n << 1) - (n & (n-1));
	}
}

LL query(int pos) {
	LL res = 0;
	while (pos) {
		res += sum[pos];
		pos &= pos-1;
	}
	return res;
}

int main()
{
       freopen("datorii.in", "rt", stdin);
       freopen("datorii.out", "wt", stdout);

	   int M;
	   scanf("%d %d", &N, &M);
	   REP(i, N) {
		   int a;
		   scanf("%d", &a);
		   add(i+1, a);
	   }

	   while (M--) {
		   int type, a, b;
		   scanf("%d %d %d", &type, &a, &b);
		   if (type) {
			   printf("%d\n", query(b) - query(a-1));
		   } else {
			   add(a, -b);
		   }
	   }

       return 0;
}