Cod sursa(job #3290420)

Utilizator Paunescu_Stefan_Vladfdsasdfdfs Paunescu_Stefan_Vlad Data 30 martie 2025 18:02:37
Problema Datorii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100000
int v[4*N];
int n,q,cn,i,type,x,y;
void build(){
  for(i=cn-1;i>0;i--){
    v[i]=v[i*2]+v[i*2+1];
  }
}
void update(int poz, int val){
  poz+=cn;
  v[poz]-=val;
  poz/=2;
  while(poz>0){
    v[poz]-=val;
    poz/=2;
  }
}
int query(int st, int dr){
  st+=cn;
  dr+=cn;
  int sum=0;
  while(st<=dr){
    if(st%2==1){
      sum+=v[st];
    }
    if(dr%2==0){
      sum+=v[dr];
    }
    st=(st+1)/2;
    dr=(dr-1)/2;
  }
  return sum;
}
int main()
{
    FILE *fin; FILE *fout;
    fin=fopen("datorii.in","r");
    fout=fopen("datorii.out","w");
    fscanf(fin,"%d%d",&n,&q);
    cn=pow(2,32-__builtin_clz(n));
    for(i=cn;i<cn+n;i++){
      fscanf(fin,"%d",&v[i]);
    }
    build();
    for(i=1;i<=q;i++){
      fscanf(fin,"%d%d%d",&type,&x,&y);
      if(type==0){
        x--;
        update(x,y);
      }
      if(type==1){
        x--;
        y--;
        fprintf(fout,"%d\n",query(x,y));
      }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}