Cod sursa(job #653768)

Utilizator palcuiealexAlex Palcuie palcuiealex Data 28 decembrie 2011 20:47:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
/***************************************************
 * Author: Alexandru Palcuie
 * Country: Romania
 * Email: alex [dot] palcuie [at] gmail [dot] com
 * Website: http://palcu.blogspot.com/
 * Year: 2011
****************************************************/

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>

using namespace std;

//Constants
const int N = 15001;

//Global Vars
int n, nOperatii, v[N];

//Structs

//Solve Functions
void update(int poz, int val){
    while(poz <= n){
        v[poz] += val;
        poz += (poz & -poz);
    }
}
int query(int poz){
    int sol = 0;
    while(poz > 0){
        sol += v[poz];
        poz -= (poz & -poz);
    }
    return sol;
}

int main(){
    #ifndef ONLINE_JUDGE
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    #endif

    scanf("%d%d", &n, &nOperatii);

    for(int i=1, x; i<=n; i++){
        scanf("%d", &x);
        update(i, x);
    }

    int c, x, y;
    while(nOperatii--){
        scanf("%d%d%d", &c, &x, &y);
        if (c==0){
            update(x, -y);
        }
        else
            printf("%d\n", query(y) - query(x-1));
    }

    return 0;
}