Cod sursa(job #1755435)

Utilizator Vladi.BarasBaras Nicholas Vladimir Laurentiu Vladi.Baras Data 10 septembrie 2016 10:45:33
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <cstdio>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n;
    int putere(int a)
{if(a==0)return 1;
    int r=1;
    while((a&r)==0)
    {
        r<<=1;
    }
    return r;
}
/*suma de la poz 1 la poz b*/
int suma(int b,int s[])
{
    int r=1,a=0;
    while(b>0)
    {
        a+=s[b];
        r=putere(b);
        b-=r;
    }
    return a;
}

/*pe pozitia adaugam val b*/
void actualizare(int a, int b,int s[])
{
    int poz=a,salt=0;
    while(poz<=n)
    {
        s[poz]+=b;
        salt=putere(poz);
        poz=salt+poz;
    }
}

    int v[15001];
int main()
{

int m,aux,a;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
    cin>>a;
    actualizare(i,a,v);
}int a1,a2,a3;
for(int i=1;i<=m;i++)
{
    cin>>a1>>a2>>a3;
    if(a1==1)
    {
    cout<< suma(a3,v)-suma(a2-1,v)<<'\n';
    }
    else
    {
        actualizare(a2,a3,v);
    }
}

    return 0;
}