Pagini recente » Cod sursa (job #840040) | Cod sursa (job #2753228) | Cod sursa (job #2036683) | Cod sursa (job #2023875) | Cod sursa (job #2324573)
#include <bits/stdc++.h>
using namespace std;
int v[100002];
int n, q;
inline void update(int pos, int val)
{
for(; pos <= n; pos += (pos & -pos))
v[pos] += val;
}
inline int query(int pos)
{
int ans = 0;
for(; pos >= 1; pos -= (pos & -pos))
ans += v[pos];
return ans;
}
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
f >> n >> q;
for(int i = 1, x; i <= n; i++)
{
f >> x;
update(i, x);
}
while(q--)
{
int c, a, b; f >> c >> a;
if(c < 2)
{
f >> b;
if(!c)
update(a, b);
else
g << query(b) - query(a - 1) << '\n';
}
else
{
int st = 1, dr = n, m, val, ok = 0;
while(st <= dr)
{
m = (st + dr) >> 1;
val = query(m);
if(val == a)
{
ok = 1;
g << m << '\n';
break;
}
else if(val < a)
st = m + 1;
else
dr = m - 1;
}
if(!ok)
g << "-1\n";
}
}
f.close();
g.close();
return 0;
}