Cod sursa(job #2245579)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 25 septembrie 2018 16:07:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,x;
int pos,arb[55005];
int start,finish;
void Up(int node,int st,int dr)
{
    if(st==dr)
    {
        if(arb[node]==0)
            arb[node]=x;
        else
            arb[node]-=x;
            return;
    }
    int mij=(dr-st)/2+st;

    if(pos<=mij)
        Up(node*2,st,mij);
    else
        Up(node*2+1,mij+1,dr);
    arb[node]=arb[node*2]+arb[node*2+1];
}
int Qu(int node,int st,int dr)
{
    if(start<=st && dr<=finish)
        return arb[node];
    int mij=(dr-st)/2+st;
    if(dr<start || st>finish)
        return 0;
    return Qu(node*2,st,mij)+Qu(node*2+1,mij+1,dr);
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        f>>x;
        pos=i;
        Up(1,1,n);
    }
    for(int i=1;i<=m;++i)
    {
        int op;
        f>>op;
        if(!op)
        {
            f>>pos>>x;
            Up(1,1,n);
        }
        else
        {

            f>>start>>finish;
            g<<Qu(1,1,n)<<'\n';
        }
    }
}