Cod sursa(job #2626272)

Utilizator dumitru123Patularu Mihai dumitru123 Data 6 iunie 2020 13:00:42
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<bits/stdc++.h>
#define nmax 15005
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m;
int arb[4*nmax];
void update(int st, int dr, int poz, int pz, int val)
{
    if(st>pz || dr<pz)
        return;
    if(st==dr)
    {
        arb[poz] -= val;
        return;
    }
    int mid=(st+dr)/2;
    update(st,mid,2*poz,pz,val);
    update(mid+1,dr,2*poz+1,pz,val);
    arb[poz] = arb[2*poz+1] + arb[2*poz];
}
int gaseste(int st, int dr, int poz, int a, int b)
{
    if(st>b || dr<a)
        return 0;
    if(st>=a && dr<=b)
        return arb[poz];
    int mid=(st+dr)/2;
    int e1=gaseste(st,mid,2*poz,a,b);
    int e2=gaseste(mid+1,dr,2*poz+1,a,b);
    return e1+e2;
}
void solve(){
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        update(1,n,1,i,-x);
    }
    for(int i=1;i<=m;i++)
    {
        int c,a,b;
        f>>c>>a>>b;
        if(!c)
            update(1,n,1,a,b);
        else
            g<<gaseste(1,n,1,a,b)<<'\n';
    }
}
int main()
{
    solve();
    return 0;
}