Pagini recente » Cod sursa (job #2056376) | Cod sursa (job #654484) | Cod sursa (job #98736) | Cod sursa (job #1733648) | Cod sursa (job #2227648)
//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
using namespace std;
//#define IOS ios::sync_with_stdio(false), cin.tie(0);
ifstream in("aib.in");
ofstream out("aib.out");
const int N = 1e5 + 7;
int a[N];
int n;
void update(int poz, int val)
{
while(poz <= n)
{
a[poz] += val;
poz += (poz & -poz);
}
}
int sum(int nod)
{
if(nod == 0)
return 0;
return a[nod] + sum(nod - (nod & -nod));
}
void bs(int x)
{
int st = 1;
int dr = n;
int ans = -1;
while(st <= dr)
{
int mid = (st + dr) / 2;
int val = sum(mid);
if(val == x)
{
ans = mid;
break;
}
if(val > x)
dr = mid - 1;
else
st = mid + 1;
}
out << ans << '\n';
}
main()
{
// IOS
int q;
in >> n >> q;
for(int i = 1, x; i <= n && cin >> x; i++)
update(i, x);
while(q--)
{
int cerinta;
in >> cerinta;
int a, b;
switch(cerinta)
{
case(0): in >> a >> b; update(a, b); break;
case(1): in >> a >> b; cout << sum(b) - sum(a - 1) << '\n'; break;
case(2): in >> a; bs(a); break;
}
}
}