Pagini recente » Cod sursa (job #2281279) | Cod sursa (job #1340945) | Cod sursa (job #1108046) | Cod sursa (job #2985768) | Cod sursa (job #1520405)
#include <bits/stdc++.h>
#define UB(x) (x&(-x))
using namespace std;
int n,m,i,x,aib[100010],pi,ps,p,va,su,in,po,u,mi,ss;
char ce;
void Add(int poz,int val)
{
int i;
for(i=poz; i<=n; i+=UB(i))
aib[i]+=val;
}
int Suma(int a,int b)
{
int i,s1=0,s2=0;
for(i=a-1; i>0; i-=UB(i))
s1+=aib[i];
for(i=b; i>0; i-=UB(i))
s2+=aib[i];
return s2-s1;
}
int main()
{
freopen("aib.in","r",stdin);
ofstream g ("aib.out");
scanf("%d%d",&n,&m);
for(i=1; i<=n; ++i)
{
scanf("%d",&x);
Add(i,x);
}
for(i=1; i<=m; ++i)
{
scanf("\n");
scanf("%c",&ce);
if(ce=='0')
{
scanf("%d%d",&p,&va);
Add(p,va);
}
else if(ce=='1')
{
scanf("%d%d",&pi,&ps);
g<<Suma(pi,ps)<<'\n';
}
else
{
scanf("%d",&su);
p=1;u=n;
while(p<=u){
mi=(p+u)/2;
ss=Suma(1,mi);
if(ss==su){
po=mi;
u=mi-1;}
else if(ss>su)u=mi-1;
else p=mi+1;}
if(po)g<<po<<'\n';
else g<<-1<<'\n';}
}
return 0;
}