Cod sursa(job #1252999)

Utilizator rebound212Mihnea Savu rebound212 Data 31 octombrie 2014 17:58:52
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>

#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX 20
using namespace std;
int arb[40001],i,n,m,op,a,b,x,poz,sum;
inline void update ( int nod, int st, int dr)
{
    if(st==dr)
    {
        arb[nod]+=x;
        return;
    }
   int m=(st+dr)/2;
   if(m>=poz)
   {
       update(2*nod,st,m);
   }
   else update (2*nod+1,m+1,dr);

   arb[nod]=arb[nod*2] + arb[nod*2+1];


}
inline void query (int nod, int st, int dr)
{
  if(a<=st && dr<=b)
  {
     sum+=arb[nod];
     return;
  }
   int m=(st+dr)/2;
  if(a<=m) query(nod*2,st,m);
  if(m<b) query(nod*2+1,m+1,dr);
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
    scanf("%d",&x);
    poz=i; update(1,1,n);
}
for(i=1;i<=m ;i++)
{
    scanf("%d %d %d",&op,&a,&b);
    if(op) { sum=0; query(1,1,n); printf("%d\n",sum);}
    else {poz=a;  x=-1*b; update(1,1,n);}
}
    return 0;
}