Pagini recente » Cod sursa (job #1984805) | Cod sursa (job #2537904) | Cod sursa (job #310257) | Cod sursa (job #3164878) | Cod sursa (job #2868810)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
int aib[100001], n, q;
int v[100001];
void update (int poz, int val)
{
for (int i = poz;i<=n;i += (i & -i))
aib[i] += val;
}
int qr (int poz)
{
int ans = 0;
for (int i = poz;i>0;i -= (i & -i))
ans += aib[i];
return ans;
}
int qr2 (int val)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int poz = -1;
int st = 1, dr = n;
while (st <= dr)
{
int mid = (st + dr) / 2;
int c = qr(mid);
if (c == val)
{
poz = mid;
break;
}
else if (c > val)
dr = mid - 1;
else
st = mid + 1;
}
return poz;
}
main()
{
in >> n >> q;
for (int i = 1;i<=n;++i)
{
in >> v[i];
update(i, v[i]);
}
for (int i = 1;i<=q;++i)
{
int type;
in >> type;
if (type == 0)
{
int poz, val;
in >> poz >> val;
update(poz, val);
}
else if (type == 1)
{
int st, dr;
in >> st >> dr;
out << qr(dr) - qr(st - 1) << '\n';
}
else
{
int val;
in >> val;
out << qr2(val) << '\n';
}
}
return 0;
}