Cod sursa(job #2386523)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 23 martie 2019 10:44:23
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
FILE* FIN=freopen("datorii.in","r",stdin);
FILE* FOUT=freopen("datorii.out","w",stdout);
using namespace std;

int v[17024][17],n,m,p;

void cit()
{
    int i;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&v[i][0]);
}
void form()
{
    int i,j,l;
    for(i=1,l=(n+1)/2;l>1;i++,l=(l+1)/2)
        for(j=0;j<l;j++)
            v[j][i]=v[j+j][i-1]+v[j+j+1][i-1];
    v[0][i]=v[0][i-1]+v[1][i-1];
    i++;
    p=i;
}
void act()
{
    int x,i,y;
    scanf("%d%d",&x,&y);
    for(i=0,x--;i<p;i++,x>>=1)
        v[x][i]-=y;
}
long long sum(int z)
{
    long long sol;
    int i;
    for(i=0,sol=0;z;i++,z>>=1)
        if(z%2)
            sol+=v[z-1][i];
    return sol;
}
void af()
{
    int x,y;
    scanf("%d%d",&x,&y);
    printf("%lld\n",sum(y)-sum(x-1));
}
int main()
{
    int i,q;
    cit();
    form();
    for(i=0;i<m;i++)
    {
        scanf("%d",&q);
        if(!q)
            act();
        else
            af();
    }
    return 0;
}