Cod sursa(job #1127355)

Utilizator niktudyNica Tudor niktudy Data 27 februarie 2014 12:07:21
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int a[33000],n,m,inf=2000000000,zi,b,suma;
int calc (int poz)
{
    if (a[poz]!=inf)
        return a[poz];
    a[poz]=calc (2*poz)+calc (2*poz+1);
}
void update (int poz)
{
    if (!poz)
        return;
    a[poz]-=b;
    update (poz/2);
}
void querry (int poz,int st,int dr)
{
    if (st>=zi&&dr<=b)
    {
        suma+=a[poz];
        return;
    }
    int mij=(st+dr)/2;
    if (mij>=zi)
        querry (poz<<1,st,mij);
    if (mij<b)
        querry (poz*2+1,mij+1,dr);
}
int main()
{
    int i,poz=1,tip;
    fin>>n>>m;
    while (poz<=n)
        poz=poz<<1;
    for (i=1;i<=poz<<1;i++)
        a[i]=inf;
    for (i=1;i<=n;i++)
        fin>>a[poz+i-1];
    calc (1);
    //for (i=1;i<=poz*2-1;i++)
        //fout<<a[i]<<' ';
    for (i=1;i<=m;i++)
    {
        fin>>tip>>zi>>b;
        if (!tip)
            update (zi+poz-1);
        else
        {
            suma=0;
            querry (1,1,poz);
            fout<<suma<<'\n';
        }
    }
    fin.close ();
    fout.close ();
    return 0;
}