Cod sursa(job #2217311)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 29 iunie 2018 23:00:40
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
int n,m,i,j,k,U[16000],D[16000],s[16000],ss,si;
void read(),solve();
int main()
{
    read();
    solve();
    return 0;
}
void read()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
}
void solve()
{
    for(i=1;i<=n;i<<=1)
    {
        j=i<<1;
        for(k=i;k<=n;k=k+j)
        {
            U[k]=k+i<=n?k+i:0;
            D[k]=k-i;
        }
    }
    for(i=1;i<=n;i++)
    {
        scanf("%d",&si);
        for(j=i;j;j=U[j])s[j]+=si;
    }
    for(;m;m--)
    {
        scanf("%d%d%d",&i,&j,&k);
        if(i)
        {
            si=ss=0;j--;
            for(;j;j=D[j])si+=s[j];
            for(;k;k=D[k])ss+=s[k];
            printf("%d\n",ss-si);
            continue;
        }
        for(;j;j=U[j])
            s[j]-=k;
    }
}