Pagini recente » Cod sursa (job #1654313) | Cod sursa (job #2974579) | Cod sursa (job #1344784) | Cod sursa (job #2024405) | Cod sursa (job #1434440)
#include<cstdio>
int aib[100001];
int n;
int put2(int numar)
{
int put=0;
while(numar%2==0)
{
numar/=2;
put++;
}
return put;
}
void adauga(int poz,int elem)
{
if(put2(poz)==0)
aib[poz]+=elem,poz++;
while(poz<=n)
{
aib[poz]+=elem;
poz+=(1<<put2(poz));
}
}
// Suma(1,poz)
int suma(int poz)
{
int S=0;
while(poz>0)
{
S+=aib[poz];
poz-=(1<<put2(poz));
}
return S;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
int elem;
scanf("%d ",&elem);
adauga(i,elem);
}
for(int j=1;j<=m;j++)
{
int tip;
scanf("%d ",&tip);
switch(tip)
{
case 0:{
int poz,val;
scanf("%d %d ",&poz,&val);
adauga(poz,val);
break;
};
case 1:{
int st,dr;
scanf("%d %d ",&st,&dr);
printf("%d\n",suma(dr)-suma(st-1));
break;
};
case 2:{
int s;
scanf("%d ",&s);
bool pp=true;
for(int i=1;i<=n && pp;i++)
{
if(suma(i)==s)
{
printf("%d\n",i);
pp=0;
}
}
if(pp)
printf("-1\n");
break;
};
}
}
fclose(stdin);
fclose(stdout);
return 0;
}