Cod sursa(job #2653795)

Utilizator anabatAna Batrineanu anabat Data 29 septembrie 2020 09:06:47
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>

using namespace std;

#define NMAX 100000

int v[NMAX+1],aib[NMAX+5];

void update(int poz,int val){
  for(int i=poz;i<NMAX;i+=i&(-i))
    aib[i]+=val;
}

int query(int poz){
  int answer=0;
  for(int i=poz;i>0;i-=i&(-i))
    answer+=aib[i];
  return answer;
}

int main()
{
  FILE *fin,*fout;
  fin=fopen("datorii.in","r");
  fout=fopen("datorii.out","w");

  int n,m,q,a,b,i;
  fscanf(fin,"%d%d",&n,&m);
  for(i=1;i<=n;i++){
    fscanf(fin,"%d",&v[i]);
    update(i,v[i]);
  }
  for(i=1;i<=m;i++){
    fscanf(fin,"%d%d%d",&q,&a,&b);
    if(q==0){
      update(a,-b);
    }
    else{
      if(a==1)
        fprintf(fout,"%d\n",query(b));
      else
        fprintf(fout,"%d\n",query(b)-query(a-1));
    }
  }
  fclose(fin);
  fclose(fout);
  return 0;
}