Pagini recente » Cod sursa (job #1420298) | Cod sursa (job #2304120) | Cod sursa (job #1309652) | Cod sursa (job #2075468) | Cod sursa (job #1520410)
#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;
long long 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 pz)
{
int i;
long long s=0;
for(i=pz; i; i-=UB(i))
s+=aib[i];
return s;
}
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(ps)-Suma(pi-1)<<'\n';
}
else
{
scanf("%d",&su);
po=0;
p=1;
u=n;
while(p<=u)
{
mi=(p+u)/2;
ss=Suma(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;
}