Pagini recente » Cod sursa (job #453735) | Cod sursa (job #1407868) | Cod sursa (job #162293) | Cod sursa (job #2880625) | Cod sursa (job #2754644)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, a[100005], aib[100005];
void update(int p, int x) {
for( ; p <= n; p += (p&(-p)))
aib[p] += x;
}
int query(int p) {
int res = 0;
for( ;p > 0; p -= (p&(-p)))
res += aib[p];
return res;
}
int bs(int x) {
int l = 1, r = n, ans = -1;
while(l <= r) {
int m = l+(r-l)/2;
int q = query(m);
if(q == x) {
ans = m;
}
if(q >= x) {
r = m-1;
} else {
l = m+1;
}
}
return ans;
}
int main() {
fin >> n >> m;
for(int i = 1; i <= n; i++) {
fin >> a[i];
update(i, a[i]);
}
while(m--) {
int t,a , b;
fin >> t >> a;
if(t == 2) {
fout << bs(a) << '\n';
} else if(t == 1) {
fin >> b;
fout << query(b)-query(a-1) << '\n';
} else {
fin >> b;
update(a, b);
}
}
}