Cod sursa(job #1439473)

Utilizator dyanagGrigore Diana dyanag Data 22 mai 2015 13:50:39
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <fstream>
#include<cstring>
using namespace std;

FILE *f=fopen("datorii.in", "r");
FILE *g=fopen("datorii.out", "w");

int v[100001], c, n, m, s, t;

inline int Minim(int a, int b) {
    if (a< b)
        return a;
    return b;
}

void add(int poz, int val){
     c=0;
     while(poz<=n){
           v[poz]+=val;
           while(!(poz&(1<<c)))
                ++c;
           poz+=(1<<c);
           c+=1;
     }
}

int Q(int poz){
    c=0, s=0;
    while(poz>0){
          s+=v[poz];
          while(!(poz&(1<<c)))
            ++c;
          poz-=(1<<c);
          c+=1;
    }
    return s;
}


int main()
{
    int k, x, y;
    fscanf(f, "%d%d", &n, &m);
    for(int i=1; i<=n; ++i){
        fscanf(f, "%d", &t);
        add(i,t);
    }
    for(int i=1; i<=m; ++i){
        fscanf(f, "%d%d%d", &k, &x, &y);
        if(k==0)
            add(x,-y);
        else
            fprintf(g, "%d\n", Q(y)-Q(x-1));

    }
return 0;
}