Cod sursa(job #1487392)

Utilizator dec0o0dinu pinu dec0o0 Data 16 septembrie 2015 19:11:07
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int sum[16000000];
inline void update (int nod, int st, int dr, int pos, int val)
{  if(st==dr)
{
    sum[nod]+=val;
    return;
}
    int med=(st+dr)/2;
    if(pos<=med)update(nod*2,st,med,pos,val);
    if(pos>med)update(nod*2+1,med+1,dr,pos,val);
    sum[nod]=sum[nod*2]+sum[nod*2+1];
    
}
inline int query (int nod, int st, int dr, int a,int b)
{   if(a<=st&&dr<=b)
    return sum[nod];
    int ans=0;
    int med=(st+dr)/2;
    if(a<=med)ans=ans+query(nod*2,st,med,a,b);
    if(b>med)ans=ans+query(nod*2+1,med+1,dr,a,b);
    return ans;
}
int main()
{   int i,n,m,x,t,a,b;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++)
    {   in>>t>>a>>b;
        if(t==0)
        {
            update (1,1,n,a,-b);
        }
        else
            out<<query(1,1,n,a,b)<<'\n';
    }
    
    return 0;
}