Pagini recente » Cod sursa (job #276841) | Cod sursa (job #282097) | Cod sursa (job #41637) | Cod sursa (job #1519587) | Cod sursa (job #3247787)
#include <fstream>
using namespace std;
int n,m;
int v[100001],aib[100001];
int presum(int i){
int sum=0;
while(i>0){
sum+=aib[i];
i-=(i&-i);
}
return sum;
}
int query(int i,int j){
return presum(j)-presum(i-1);
}
void update(int i,int val){
while(i<=n){
aib[i]+=val;
i+=(i&-i);
}
}
ifstream cin("aib.in");
ofstream cout("aib.out");
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> v[i];
update(i,v[i]);
}
for(int i=0;i<m;i++){
int q,x,y;
cin >> q >> x;
if(q==0){
cin >> y;
update(x,y);
}
else if(q==1){
cin >> y;
cout << query(x,y)<< '\n';
}
else{
int st,dr;
st=1;
dr=n;
while(dr>st){
int mij=(st+dr)/2;
int a=presum(mij);
if(a>=x)
dr=mij;
else
st=mij+1;
}
if(presum(dr)==x)
cout<< dr << '\n';
else
cout << "-1\n";
}
}
return 0;
}