Cod sursa(job #2758750)

Utilizator mitocaru_marioMitocaru Mario-Alexandru mitocaru_mario Data 12 iunie 2021 13:54:29
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");
const int N=33002;
int n,m,a[N],p,c,x,y;

int suma(int nod, int st, int dr)
{
    if(x<=st && dr<=y)
    return a[nod];
    if(x>dr || st>y)
        return 0;
    int mi=(st+dr)/2;
    return suma(2*nod,st,mi)+suma(2*nod+1,mi+1,dr);

}
int main()
{
    f>>n>>m;
    p=1;
    while(p<n)
        p*=2;
    for(int i=1;i<=n;i++)
        f>>a[p-1+i];
    for(int i=p-1;i>=1;i--)
        a[i]=a[2*i]+a[2*i+1];
    for(;m;m--)
    {
        f>>c>>x>>y;
        if(c==1)
        {
            x=x+p-1;
            a[x]-=y;
            x/=2;
            while(x>0)
            {
                a[x]=max(a[2*x],a[2*x+1]);
                x/=2;
            }
        }
        else
            g<<suma(1,1,p)<<'\n';
    }
    return 0;
}