Cod sursa(job #2547199)

Utilizator Dan_BDan Bugnariu Dan_B Data 15 februarie 2020 09:55:33
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");

int ar[4*100010],n,m;

void update(int st,int dr,int pz,int pza,int val)
{
    if(st>pz || dr<pz) return;
    if(st==dr)
    {
        ar[pza]-=val;
        return;
    }
    int mid=(dr+st)/2;
    update(st,mid,pz,pza*2,val);
    update(mid+1,dr,pz,pza*2+1,val);
    ar[pza]=ar[pza*2]+ar[pza*2+1];
}
int fnd(int st,int dr,int pza,int a,int b)
{
    if(st>b || dr<a) return 0;
    if(st>=a && dr<=b) return ar[pza];
    int mid=(dr+st)/2;
    int rezst,rezdr;
    rezst=fnd(st,mid,pza*2,a,b);
    rezdr=fnd(mid+1,dr,pza*2+1,a,b);
    return rezst+rezdr;
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int v;
        in>>v;
        update(1,n,i,1,-v);
    }
    for(int i=1;i<=m;i++)
    {
        int op,a,b;
        in>>op>>a>>b;
        if(op==0)
        {
            update(1,n,a,1,b);
        }
        else
        {
            out<<fnd(1,n,1,a,b)<<'\n';
        }
    }
    return 0;
}