Cod sursa(job #2367253)

Utilizator Alex221Dumitru Alexandru Alex221 Data 5 martie 2019 09:47:44
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define MAXN (1<<19)
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,poz,val,v[MAXN],m,s,a,b;
bool ok;
void construire (int nod, int st, int dr)
{ if(st==dr) v[nod]+=val;
   else
   { int mij=(st+dr)/2;
      if(poz<=mij) construire(2*nod,st,mij);
       if(poz>mij) construire(2*nod+1,mij+1,dr);
     v[nod]=v[2*nod]+v[2*nod+1];
   }
}
void afisare (int nod,int st, int dr)
{ if(a<=st && dr<=b)  { s+=v[nod];
                        return ;
                     }
    else
    { int mij=(st+dr)/2;
      if(mij>=a) afisare(2*nod,st,mij);
      if(mij<b) afisare(2*nod+1,mij+1,dr);
    }
}
int main()
{ f>>n>>m;
  for(int i=1;i<=n;i++)
  { f>>val;
    poz=i;
    construire(1,1,n);
  }
  for(int i=1;i<=m;i++)
  { f>>ok>>a>>b;
    s=0;
    if(ok==1)
    { afisare(1,1,n);
        g<<s<<'\n';
    }
    else
    { poz=a;
      val=(-1)*b;
      construire(1,1,n);
    }
  }
    return 0;
}