Cod sursa(job #1264841)

Utilizator Eduard6421Eduard Gabriel Eduard6421 Data 16 noiembrie 2014 13:14:06
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#define NMAX 15001
using namespace std;
int aib[NMAX],n;
void update(int val,int poz)
{
    for(; poz<=n; poz+=poz&(poz-1)^poz)
    {
        aib[poz]+=val;
    }
}
void decrease(int val,int poz)
{
    for(; poz<=n; poz+=poz&(poz-1)^poz)
    {
        aib[poz]-=val;
    }
}
int query(int day1,int day2)
{
    int s=0;
    for(; day2; day2-=day2&(day2-1)^day2)
        s+=aib[day2];
    for(day1-=1; day1; day1-=day1&(day1-1)^day1)
        s-=aib[day1];
    return s;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int m,i,sum,day1,day2,operation;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; ++i)
    {
        scanf("%d",&sum);
        update(sum,i);
    }
    for(i=1; i<=m; ++i)
    {
        scanf("%d",&operation);
        switch(operation)
        {
        case 0 :
            scanf("%d%d",&day1,&sum);
            decrease(sum,day1);
            break;
        case 1 :
            scanf("%d%d",&day1,&day2);
            printf("%d\n",query(day1,day2));
            break;
        }
    }

}