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