Cod sursa(job #1249498)

Utilizator adnionutCojocaru Ionut adnionut Data 27 octombrie 2014 00:40:28
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
/*

Punctaj final pe sursa curenta:
*/
#include <fstream>
using namespace std;
 
ifstream is ("datorii.in");
ofstream os ("datorii.out");
 
int N, M;
int AIB[15005];
 
void Update(int pos, int val);
int Sum(int pos);
 
int main()
{
    is >> N >> M;
    for (int i = 1, X; i <= N; ++i)
    {
        is >> X;
        Update(i, X);
    }
    for (int i = 1, op, A, B; i <= M; ++i)
    {
        is >> op >> A >> B;
        if (op == 0)
            Update(A, -B);
        else
        {
            os << Sum(B) - Sum(A-1) << '\n';
        }
    }
    is.close();
    os.close();
}
 
void Update(int pos, int val)
{
    for (int i = pos; i <= N; i += (i & -i))
        AIB[i] = max(0, AIB[i]+val);
};
 
int Sum(int pos)
{
    int S = 0;
    for (int i = pos; i > 0; i -= (i & -i))
        S += AIB[i];
    return S;
};