Pagini recente » Cod sursa (job #13719) | Cod sursa (job #1692264) | Cod sursa (job #3138009) | Cod sursa (job #677597) | Cod sursa (job #1436235)
#include<cstdio>
int aib[100001];
int n;
int put2(int numar)
{
return numar xor (numar&(numar-1));
}
void adauga(int poz,int elem)
{
if(put2(poz)==0)
aib[poz]+=elem,poz++;
while(poz<=n)
{
aib[poz]+=elem;
poz+=(put2(poz));
}
}
// Suma(1,poz)
int suma(int poz)
{
int S=0;
while(poz>0)
{
S+=aib[poz];
poz-=(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;
}