Cod sursa(job #261476)

Utilizator adrian69adrian horia adrian69 Data 18 februarie 2009 12:35:15
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
int a[100005],b[100005];
int n,m;
/*void adunare()
{
}*/
void actualizare(int i,int x)
{int j;
 for(j=i;j<=n;j++)
  b[j]+=x;

}
void suma(int i,int j)
{ 
  printf("%d \n",(b[j]-b[i-1]));
}
void poz(int k)
{int i,ok=0;
 for(i=1;i<n;i+=2)
  { if(b[i]==k)
    {printf("%d \n",i);ok=1;}
	if(b[i]>k)
    {if(b[i-1]==k)
    {printf("%d \n",i-1);ok=1;}
	  break;
   }  
  }
 if(ok==0&&b[n]==k)
 {printf("%d \n",n);ok=1;
 } 
 if(ok==0)
  printf("-1 \n");
}
int main()
{int i;
 int x,y,z;
 freopen("aib.in","r",stdin);
 freopen("aib.out","w",stdout);
 scanf("%d %d",&n,&m);
 scanf("%d",&x);
 a[1]=x;
 b[1]=x;  
 for(i=2;i<=n;i++)
  {scanf("%d",&x);
   a[i]=x;
   b[i]+=b[i-1]+x; 
  } 
 
 for(i=0;i<m;i++)
 {
   scanf("%d",&x);
   if(x==0)
   {scanf("%d %d",&y,&z);
    actualizare(y,z);
   }
   if(x==1)
   { scanf("%d %d",&y,&z); 
     suma(y,z);
   }
   if(x==2)
   {scanf("%d",&y); 
    poz(y); 
   }
 
} 
 return 0;
}