Pagini recente » Cod sursa (job #2680141) | Cod sursa (job #1842887) | Cod sursa (job #2484524) | Cod sursa (job #1249321) | Cod sursa (job #2857688)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n, m;
class ftree
{
private:
int v[100001];
int n;
int sum(int r)
{
int s = 0;
for (; r > 0; r -= (r & (-r)))
s += v[r];
return s;
}
public:
void init(int* x, int n)
{
this->n = n;
for (int i = 1; i <= n; i++)
add(i, x[i]);
}
void add(int pos, int val)
{
for (; pos <= n; pos += (pos & (-pos)))
v[pos] += val;
}
int sum(int l, int r)
{
return sum(r) - sum(l - 1);
}
int search(int val)
{
int l = 1, r = n + 1;
while (r - l > 1)
{
int mid = (l + r) / 2;
if (sum(mid) <= val)
l = mid;
else r = mid;
}
return l;
}
};
ftree aib;
int v[100001];
int main()
{
ios_base::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> v[i];
aib.init(v, n);
char c;
int a, b;
for (int i = 1; i <= m; i++)
{
cin >> c;
if (c == '0')
{
cin >> a >> b;
aib.add(a, b);
}
if (c == '1')
{
cin >> a >> b;
cout << aib.sum(a, b) << '\n';
}
if (c == '2')
{
cin >> a;
cout << aib.search(a) << '\n';
}
}
return 0;
}