Cod sursa(job #1284659)

Utilizator nosurrender99Bura Bogdan nosurrender99 Data 6 decembrie 2014 18:24:48
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <iostream>
using namespace std;

fstream f("datorii.in", ios::in), g("datorii.out", ios::out);

void add(int x, int t, int* val,int n)
{
    int poz=0;
    while (x<=n)
    {
        val[x] += t;
        while((x & (1<<poz)) == 0)
        {
            poz++;
        }
        x=x+(1<<poz);
        poz++;
    }
    for(int i=0;i<=n;i++)
    {
        cout<<val[i]<<" ";
    }
    cout<<'\n';
}

int ask(int x, int y, int* val)
{
    int s1=0, poz=0;
    while(y>0)
    {
        s1 = s1 + val[y];
        while((y & (1<<poz)) == 0)
        {
            poz++;
        }
        y -= (1<<poz);
        poz++;
    }
    x--;
    int s2=0;
    poz=0;
    while(x>0)
    {
        s2 += val[x];
        while((x & (1<<poz)) == 0)
        {
            poz++;
        }
        x -= (1<<poz);
        poz++;
    }
    return (s1 - s2);
}

int main()
{
    int n,m;
    int val[15001];
    f>>n>>m;
    for(int i=0;i<=n;i++)
    {
        val[i]=0;;
    }

    for(int i=1;i<=n;i++)
    {
        int x, y, z;
        f>>x;
        add(i,x,val,n);
    }

    for(int i=0;i<m;i++)
    {
        int cod, x,y;
        f>>cod>>x>>y;
        if(cod)
        {
            g<<ask(x,y,val)<<'\n';
        }
        else
        {
            add(x,-y,val,n);
        }
    }
}