Cod sursa(job #2457853)

Utilizator bori2000Fazakas Borbala bori2000 Data 18 septembrie 2019 21:26:25
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int n, m;
int aib[15006];

#define zeros(i) ( (i ^ (i - 1)) & i )


void tartozas_beolvas(int nap, int penz)
{
    for(int i=nap; i<=n; i+=zeros(i))
    {
        aib[i]+=penz;
    }
}

void fizet(int nap, int penz)
{
    for(int i=nap; i<=n; i+=zeros(i))
    {
        aib[i]-=penz;
    }
}

int lekerdez(int kezd, int veg)
{
    int ered_veg = 0;
    for(int i=veg; i>=1; i-=zeros(i))
    {
        ered_veg += aib[i];
    }

    int ered_kezd = 0;
    for(int i=kezd-1; i>=1; i-=zeros(i))
    {
        ered_kezd += aib[i];
    }
    return ered_veg-ered_kezd;
}

int main()
{
    /*ifstream f("datorii.in");
    ofstream g("datorii.out");*/

    FILE * myInFile;
    FILE * myOutFile;

    myInFile = fopen ("datorii.in","r");
    myOutFile = fopen ("datorii.out","w");


    //adatok beolvasasa
    fscanf(myInFile, "%d %d", &m, &n);

    int tartozas;
    for(int i=1; i<=n; i++)
    {
        fscanf(myInFile, "%d", &tartozas);
        tartozas_beolvas(i, tartozas);
    }

    //muveletek feldolgozasa
    int kod, a, b;
    int ki;
    for(int i=1; i<=m; i++)
    {
        fscanf(myInFile, "%d %d %d", &kod, &a, &b);

        if(kod==0)
        {
            fizet(a, b);
        }
        else
        {
            ki = lekerdez(a, b);
            fprintf(myOutFile, "%d\n", ki);
        }
           // g<<lekerdez(a, b)<<endl;
    }


    return 0;
}