Pagini recente » Cod sursa (job #2168226) | Cod sursa (job #1228684) | Cod sursa (job #2463965) | Cod sursa (job #1316883) | Cod sursa (job #3311609)
#include <fstream>
#define int long long
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int lsb (int x) {
return x & (-x);
}
int n;
int m;
int v[100005],aib[100005];
void update (int pos, int increment) {
while (pos<=n) {
aib[pos]+=increment;
pos+=lsb(pos);
}
}
int query (int pos) {
int sum=0;
while (pos>0) {
sum+=aib[pos];
pos-=lsb(pos);
}
return sum;
}
int binarysearch (int target) {
int st=1,dr=n;
while (st<=dr) {
int mid=(st+dr)/2;
int sum=query(mid);
if (sum==target) return mid;
if (sum>target) dr=mid-1;
if (sum<target) st=mid+1;
}
return -1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>m;
for (int i=1; i<=n; ++i) {
cin>>v[i];
update(i,v[i]);
}
int c,a,b;
for (int i=1; i<=m; ++i) {
cin>>c;
if (c==0) {
cin>>a>>b;
update(a,b);
}
if (c==1) {
cin>>a>>b;
cout<<query(b)-query(a-1)<<'\n';
}
if (c==2) {
cin>>a;
cout<<binarysearch(a)<<'\n';
}
}
}