Pagini recente » Rating Avram Matei Alexandru (Mateiasgt) | Cod sursa (job #2286345) | Cod sursa (job #262220) | Cod sursa (job #368379) | Cod sursa (job #2963189)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n;
const int NMAX = 100000;
int aib[NMAX];
void update(int p, int v)
{
for (int i = p; i <= n; i += i & - i)
aib[i] += v;
}
int query(int p)
{
int sum = 0;
for (int i = p; i; i -= i & -i)
sum += aib[i];
return sum;
}
int main()
{
int m, i, x, tip, p, a, b;
cin >> n >> m;
for (i = 1; i <= n; ++i) {
cin >> x;
update(i, x);
}
for(i = 1; i <= m; ++i) {
cin >> tip;
if (tip == 0)
{
cin >> p >> x;
update(p, x);
}
else if (tip == 1)
{
cin >> a >> b;
cout << query(b) - query(a - 1) << '\n';
}
else {
cin >> x;
int st = 1, dr = n;
while (true) {
int m = (st + dr) / 2;
int r = query(m);
if (r == x)
{
cout << m << '\n';
break;
}
else if (r > x)
dr = m - 1;
else
st = m + 1;
}
}
}
return 0;
}
/*
8 3
25 42 8 15 1 55 16 67
0 5 12
2 25
2 90
1 7 7
1 2 8
2 241
*/