Cod sursa(job #2420201)

Utilizator BogdanGhGhinea Bogdan BogdanGh Data 11 mai 2019 09:56:24
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,i,tree[15000*4],x,y,val,a[15005],poz,c;
void update(int nod,int st,int dr)
{
    if(st==dr)
    {
      tree[nod]-=val;
      if(tree[nod]<0)tree[nod]=0;
    }
    else {
    int mij=(st+dr)/2;
    if(poz<=mij)
    update(2*nod,st,mij);
    if(poz>mij)
    update(2*nod+1,mij+1,dr);
    tree[nod]=tree[2*nod]+tree[2*nod+1];
    }
}
void build(int nod,int st,int dr)
{
  if(st==dr)
    tree[nod]=a[st];
  else {
    int mij=(st+dr)/2;
    build(2*nod,st,mij);
    build(2*nod+1,mij+1,dr);
    tree[nod]=tree[2*nod]+tree[2*nod+1];
  }
}
int querry(int nod,int st,int dr)
{
  if(x<=st&&dr<=y)
  return tree[nod];
  else {
    int mij=(st+dr)/2,x1=0,x2=0;
    if(x<=mij)
    x1=querry(2*nod,st,mij);
    if(y>mij)
    x2=querry(2*nod+1,mij+1,dr);
    return x1+x2;
  }
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
      f>>a[i];
    build(1,1,n);
    for(i=1;i<=m;i++)
    {
      f>>c;
      if(c==0)
      {
        f>>poz>>val;
        update(1,1,n);
      }
      else {
        f>>x>>y;
        g<<querry(1,1,n)<<'\n';
      }
    }
    return 0;
}