Pagini recente » Cod sursa (job #1364131) | Cod sursa (job #1935620) | Cod sursa (job #2988925) | Cod sursa (job #2563068) | Cod sursa (job #2449503)
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;
int tree[100200];
int p(int k)
{
return k & -k;
}
void add(int k, int n, int x)
{
while (k <= n)
{
tree[k] += x;
k += k & -k;
}
}
int sum(int k) // sum from index 1 to index k
{
int s = 0;
while (k >= 1)
{
s += tree[k];
k -= k & -k;
}
return s;
}
int main()
{
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
add(i, n, x);
}
for (int i = 0; i < m; i++)
{
int t, a, b;
cin >> t;
switch (t)
{
case 0:
cin >> a >> b;
add(a, n, b);
break;
case 1:
cin >> a >> b;
cout << sum(b) - sum(a-1) << '\n';
break;
case 2:
cin >> a;
bool fd = 0;
for (int j = 1; j <= n; j++)
{
if (sum(j) == a)
{
cout << j << '\n';
fd = 1;
break;
}
}
if (!fd)
cout << -1 <<'\n';
break;
}
}
}