Cod sursa(job #129410)

Utilizator razvan2006razvan brezulianu razvan2006 Data 29 ianuarie 2008 13:29:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");
int c[15005],n,m;
int nrzero(int x)
   {
   int nr=0;
   while(x%2==0) { ++nr; x=x/2; }
   return nr;
   }

void modificare(int x, int p, int xx)        //aduna x pe pozitia lui p.
     {
     int i,k;
     while(p<=n)
         {
         c[p]=c[p]+xx*x;
      //   k=nrzero(p);
         p+=p^(p-1)&p;
         }

     }
int suma(int p) //returneaza suma secventei [1,p];
    {
    int s=0,k;
    while(p>0)
        {
         s+=c[p];
         //k=nrzero(p);
         p-=p^(p-1)&p;
        }
    return s;
    }
int interogare(int p, int k)              //suma secventei [p,k]
    {
    int s1=suma(p-1);
    int s2=suma(k);
    return s2-s1;
    }
int main()
    {
    int i,cod,x,y,sol;
    n=4;
    fscanf(f,"%d %d",&n,&m);
    for(i=1;i<=n;++i)
        {
        fscanf(f,"%d",&x);
        modificare(x,i,1);
        }
    while(m)
        {
        fscanf(f,"%d %d %d",&cod,&x,&y);
        if(cod==1)
                  {
                  sol=interogare(x,y);
                  fprintf(g,"%d\n",sol);
                  }
        else
            {
            modificare(y,x,-1);
            }
       --m;
        }
    return 0;
    }