Cod sursa(job #2523659)

Utilizator lutusilviu ionut lutu Data 14 ianuarie 2020 16:21:02
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<iostream>
#include<fstream>
using namespace std;
#define zeros(x)((x^(x-1))&x)
void adauga(int x,int i, unsigned short int A[],int n)
{
    do
    {
        A[i]+=x;
        i+=zeros(i);
    }
while(i<=n);
}

int suma(int x,unsigned short int A[])
{
    int s=0;
    while(x)
    {
        s+=A[x];
        x-=zeros(x);
    }
    return s;
}unsigned short int A[15040];
int main()
{
    FILE *f=fopen("datorii.in","rt");
    FILE *g=fopen("datorii.out","wt");
    int n,k,i,x,p,a,b,t,v;
    fscanf(f,"%d %d",&n,&k);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&x);
       adauga(x,i,A,n);
    }
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&p);
        if(p==0)
        {
            fscanf(f,"%d %d",&t,&v);
            adauga(-v,t,A,n);
        }
        else
        {
            fscanf(f,"%d %d",&a,&b);
            fprintf(g,"%d\n",suma(b,A)-suma(a-1,A));
        }
    }
}