Pagini recente » Cod sursa (job #1385798) | Cod sursa (job #628747) | Cod sursa (job #1170430) | Cod sursa (job #3124818) | Cod sursa (job #1918943)
#include<bits/stdc++.h>
using namespace std;
int n, m, arb[100100], x, q, a, b;
void add(int i, int cost)
{
for(;i <= 100100; i+= (i&(-i)))
{
arb[i] += cost;
}
}
long long get(int i)
{
long long ans = 0;
for(;i; i-= (i&(-i)))
{
ans += arb[i];
}
return ans;
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
cin >> x;
add(i,x);
}
for (int i = 1 ; i <= m; i++)
{
cin >> q;
if (q != 2)
{
cin >> a >> b;
if (q == 0) add(a,b);
else
{
cout << get(b) - get(a-1) << "\n";
}
}else
{
cin >> a;
long long st = 1, dr = 100100;
while(dr - st >= 5)
{
long long mid = (st + dr)/2;
if (get(mid) >= a) dr = mid-1;
else st = mid+1;
}
bool u = 1;
for (;st <= dr; st++)
{
if (get(st) == a)
{
cout << st << "\n";
u = 0;
break;
}
}
if (u) cout << "-1\n";
}
}
}