Cod sursa(job #2457162)

Utilizator ViAlexVisan Alexandru ViAlex Data 16 septembrie 2019 19:57:11
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include<fstream>
using namespace std;

int valori[15000],n,q;
int arbint[30001];

FILE 			*input;
FILE 			*output;

void create(int index,int l,int r)
{
    if(l==r)
    {
        arbint[index]=valori[l];
    }
    else
    {
        int mid=(l+r)/2;
        create(index<<1,l,mid);
        create((index<<1)+1,mid+1,r);
        arbint[index]=arbint[index<<1]+arbint[(index<<1)+1];
    }
}


int srch(int l,int r,int a,int b,int index)
{
    if(l>= a&&r<=b)
    {
        return arbint[index];
    }
    else
    {
        int mid=(l+r)/2;
        int sum=0;
        if(a<=mid)
        {
            sum+=srch(l,mid,a,b,index<<1);
        }
        if(b>mid)
        {
            sum+=srch(mid+1,r,a,b,(index<<1)+1);
        }
        return sum;
    }

}

void setv(int l,int r,int val,int ind,int index)
{
    if(l==r)
    {
        arbint[index]-=val;
    }
    else
    {
        int middle=(l+r)/2;
        if(ind<=middle)
        {
            setv(l,middle,val,ind,index<<1);
        }
        else
        {
            setv(middle+1,r,val,ind,(index<<1)+1);
        }
        arbint[index]=arbint[index<<1]+arbint[(index<<1)+1];
    }


}


void creare_arbore()
{
    create(1,0,n-1);
}
int get_inv(int a,int b)
{
    return srch(0,n-1,a,b,1);
}
void set_val(int index,int value)
{
    setv(0,n-1,value,index,1);
}


void read()
{
    fscanf (input, "%d %d", &n, &q);
    for(int i=0; i<n; i++)
    {
        fscanf(input, "%d", &valori[i]);
    }
}


void solve()
{
    int a,b,c;
    for(int i=0; i<q; i++)
    {
        fscanf (input, "%d %d %d", &a, &b,&c);
        if(a==1)
        {
            fprintf(output, "%d\n", get_inv(b-1,c-1));
        }
        else
        {
            set_val(b-1,c);
        }

    }



}

int main()
{
    input = fopen ("datorii.in", "r");
    output = fopen ("datorii.out", "w");
    read();
    creare_arbore();
    solve();
    return 0;
}