Cod sursa(job #1384)

Utilizator AlxCojocaru Alexandru Alx Data 13 decembrie 2006 15:52:15
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <math.h>
using namespace std;
int m,n,a[15002],c;
double doi=2;
int main()
{
 int i;
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 scanf("%d %d",&n,&m);
 for (i=1;i<=n;i++)
 {
  int v,t=i;
  scanf("%d",&v);
   while (t<=n)
   {
    a[t]+=v;
    t+=(t&(t-1))^t;
   }
 }
 for (i=0;i<m;i++)
 {
  scanf("%d",&c);
  if (c==0)
  {
   int t,v;
   scanf("%d %d",&t,&v);
   while (t<=n)
   {
    a[t]=a[t]-v;
    t+=(t&(t-1))^t;
   }
  }
  else
  {
   int st,dr;
   scanf("%d %d",&st,&dr);
   long s1=0;
   while (dr>0)
   {
    s1+=a[dr];
    dr-=(dr&(dr-1))^dr;
   }
   st--;
   long s2=0;
   while (st>0)
   {
    s2+=a[st];
    st-=(st&(st-1))^st;
   }
   printf("%d\n",(s1-s2));
  }
 }
 return 0;
}