Cod sursa(job #1249066)

Utilizator sirbu11Sirbu Claudiu Cosmin sirbu11 Data 26 octombrie 2014 14:11:13
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include<fstream>
#include<math.h>

using namespace std;

//#define zeros(x) ( (x ^ (x - 1)) & x )
#define zeros(x) (x&(-x))
int c[15002];

int suma(int poz,int c[])
{
    int i,s=0;
    for(i=poz;i>0;i=i-zeros(i))
        s=s+c[i];
    return s;
}
void modifica(int poz,int val,int c[],int n)
{
    int i;
    for(i=poz;i<=n;i=i+zeros(i))
        c[i]=c[i]+val;
}

int main()
{
    int n,m,i,st,dr,val,poz,cod,j;

    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>val;
        modifica(i,val,c,n);
    }

    for(i=1;i<=m;i++)
    {
        f>>cod;
        if(cod==0)
        {
            f>>poz>>val;
            modifica(poz,-val,c,n);
        }
        else
        {
            f>>st>>dr;
            g<<suma(dr,c)-suma(st-1,c)<<endl;
        }
    }
    return 0;
}