Cod sursa(job #2625355)

Utilizator daniel-ilie.judetJudet Daniel Ilie daniel-ilie.judet Data 5 iunie 2020 21:50:45
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<iostream>
#include<fstream>
 
using namespace std;
 
ifstream f("datorii.in");
ofstream g("datorii.out");
 
int ai[170000],s;
 
 
void build(int x, int st, int dr, int poz,int nr)
{
 
    if(st==dr)  
        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;
 
}