Pagini recente » Cod sursa (job #1787103) | Cod sursa (job #212258) | Cod sursa (job #1832201) | Cod sursa (job #1902226) | Cod sursa (job #780760)
Cod sursa(job #780760)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Max 100001
int a[Max],n;
void update(int idx,int val)
{
while(idx <= n)
{
a[idx] += val;
idx += idx & -idx;
}
}
int suma(int idx)
{
int sum = 0;
while(idx > 0)
{
sum += a[idx];
idx -= idx & -idx;
}
return sum;
}
int c_bin(int x)
{
int l = 1, r = n, m;
while(l < r)
{
m = (l+r)/2;
if(suma(m) >= x)r = m; else l = m+1;
}
if(suma(r) == x)return r;
return -1;
}
int main(){
int m,c,x,y;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
update(i,x);
}
while(m--)
{
scanf("%d",&c);
if(c == 2)
{
scanf("%d",&x);
printf("%d\n",c_bin(x));
} else
{
scanf("%d %d",&x,&y);
if(c == 0)update(x,y); else
printf("%d\n",suma(y)-suma(x-1));
}
}
//for(int i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}