Cod sursa(job #2623289)

Utilizator iuliaaa2110Barbu Iulia Andreea iuliaaa2110 Data 2 iunie 2020 21:33:07
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int ai[170000],s;// lazy[17000],s;


void build(int x, int st, int dr, int poz,int nr)
{

    if(st==dr)  //am gasit poz din ai
        ai[x]+=nr;
    else
    {
        int m=(dr+st)/2;

        if(m<poz)
            build(2*x+1,m+1,dr,poz,nr);
        else
            build(2*x,st,m,poz,nr);

        ai[x]=ai[2*x+1]+ai[2*x];
    }

}

void get_sum(int x, int st, int dr, int a,int b)
{

    if (st>dr || a>dr || b<st) return;

    if(a<=st&&dr<=b)
        s+=ai[x];
    else if(st<dr)
    {
        int m = (st+dr)/2;

        get_sum(2*x,st,m,a,b);
        get_sum(2*x+1,m+1,dr,a,b);
    }

}
int main()
{
    int n,m,i,a,b,x;
    bool y;

    f>>n>>m;

    for(i=1;i<=n;i++)
    {
        f>>x;
        build(1,1,n,i,x);
    }

    for(i=1;i<=m;i++)
    {
        f>>y>>a>>b;

        if(!y)
           build(1,1,n,a,-b);
        else
        {
            s=0;
            get_sum(1,1,n,a,b);
            g<<s<<'\n';
        }
    }

    return 0;

}