Cod sursa(job #1446723)

Utilizator MihaiEMihaiE MihaiE Data 2 iunie 2015 17:39:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <cstring>
#include <bitset>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <stdlib.h>
#include <time.h>
#include <deque>
#define nmax 15010
#define lsb(x) (x&(-x))
using namespace std;
int n,m,i,j,arb[nmax],x,tip,y;
inline void update(int pos,int val)
{
    int i;
    for (i=pos;i<=n;i+=lsb(i))
        arb[i]=arb[i]+val;
}
inline int query(int pos)
{
    int i,sol=0;
    for (i=pos;i>0;i-=lsb(i))
        sol=sol+arb[i];
    return sol;
}
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); update(i,x);
}
for (i=1;i<=m;i++){
    scanf("%d%d%d",&tip,&x,&y);
    if (tip==0) update(x,-y); else
        printf("%d\n",query(y)-query(x-1));
}
return 0;
}