Cod sursa(job #1848077)

Utilizator cipri321Marin Ciprian cipri321 Data 15 ianuarie 2017 14:27:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>

using namespace std;
ifstream fi("datorii.in");
ofstream fo("datorii.out");
int n,m;
int A[15001],AIB[15001];
int i,tip,p,q;
void update(int AIB[],int poz,int val)
{
    while(poz<=n)
    {
        AIB[poz]+=val;
        poz+=poz&(-poz);
    }
}
int f(int poz)
{
    int s=0;
    while(poz>=1)
    {
        s+=AIB[poz];
        poz-=poz&(-poz);
    }
    return s;
}
int suma(int st,int dr)
{
    return f(dr)-f(st-1);
}
int main()
{
    fi>>n>>m;
    for(i=1;i<=n;i++)
    {
        fi>>A[i];
        update(AIB,i,A[i]);
    }
    for(i=1;i<=m;i++)
    {
        fi>>tip>>p>>q;
        if(tip==0)
            update(AIB,p,-q);
        else
            fo<<suma(p,q)<<"\n";
    }
    fi.close();
    fo.close();
    return 0;
}