Cod sursa(job #545665)

Utilizator acelasi7Tudor Maxim acelasi7 Data 3 martie 2011 19:36:27
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#define nrn 100002
//#define zeros(x) ((x^(x-1))&x)
using namespace std;
long long AIB[nrn];
int a,b,n;
FILE *in=fopen("arbint","r"),*out=fopen("arbint","w");
int zeros(int x)
{
    return (x^(x-1))&x;
}
void update(long long val,int i)
{
    for(;i<=n;i+=zeros(i))
        AIB[i]+=val;
}
long long sum(int right)
{
    long long S=0;
    for(int i=right;i>0;i-=zeros(i))
        S+=AIB[i];
    return S;
}
void second()
{
    fprintf(out,"%lld\n",sum(b)-sum(a-1));
}
int main()
{
    int i,m,c;
    fscanf(in,"%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&c);
        update(c,i);
    }
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%d %d %d",&c,&a,&b);
        switch(c)
        {
            case(1):update(b,a);break;
            case(0):second();break;
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}