Pagini recente » Cod sursa (job #2312752) | Cod sursa (job #1169486) | Cod sursa (job #248308) | Cod sursa (job #2932426) | Cod sursa (job #2600211)
#include <bits/stdc++.h>
using namespace std;
ifstream ci("aib.in");
ofstream cou("aib.out");
int n,m;
int aib[100010];
int c,a,b;
void Update(int p, int x)
{
while(p <= n)
{
aib[p] += x;
p = p + (p & (-p));
}
}
int Suma(int p)
{
int s = 0;
while(p > 0)
{
s = s + aib[p];
p = p - (p & (-p));
}
return s;
}
void citire(){
int x;
int i;
ci>>n>>m;
for(i=1;i<=n;i++){
ci>>x;
Update(i,x);
}
}
void rez(){
while(m--){
ci>>c;
if(c==0){
ci>>a>>b;
Update(a,b);
}
if(c==1){
ci>>a>>b;
cou<<Suma(b)-Suma(a-1)<<"\n";
}
if(c==2){
ci>>a;
int st=1,dr=n,mij,sol=-1,S;
while(st<=dr){
mij=(st+dr)/2;
S=Suma(mij);
if(S==a){
sol=mij;
dr=mij-1;
}else
if(S>a){
dr=mij-1;
}else{
st=mij+1;
}
}
cou<<sol<<"\n";
}
}
}
int main()
{
citire();
rez();
return 0;
}