Pagini recente » Cod sursa (job #837111) | Cod sursa (job #671417) | Cod sursa (job #1767635) | Cod sursa (job #480122) | Cod sursa (job #1449389)
#include <stdio.h>
#define Dim 100010
int N,M,BIT[Dim],X,Y,Op;
void Update(int Idx,int Val)
{
while (Idx <= N)
{
BIT[Idx] += Val;
Idx += (Idx & (-Idx));
}
}
int Sum(int Idx)
{
int R = 0;
while (Idx)
{
R += BIT[Idx];
Idx -= (Idx & (-Idx));
}
return R;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&N,&M);
for (int i = 1;i <= N;i++)
{
scanf("%d",&Y);
Update(i,Y);
}
for (int i = 1;i <= M;i++)
{
scanf("%d",&Op);
switch (Op)
{
case 0:
scanf("%d %d",&X,&Y);
Update(X,Y);
break;
case 1:
scanf("%d %d",&X,&Y);
printf("%d\n",Sum(Y)-Sum(X-1));
break;
case 2:
scanf("%d",&X);
int L = 1,R = N,Mid,S;
while (L <= R)
{
Mid = (L + R) / 2;
S = Sum(Mid);
if (X == S) break;
else
if (S > X) R = Mid - 1;
else L = Mid + 1;
}
if (X == S) printf("%d\n",Mid);
else printf("-1\n");
}
}
return 0;
}